用jQuery调用ASP.NET PageMethod / WebMethod – 返回整个页面

jQuery 1.3.2,ASP.NET 2.0。 对PageMethod(WebMethod)进行AJAX调用将返回完整/整个页面,而不仅仅是响应。 页面方法的断点显示它永远不会被击中。 我有我的方法[WebMethod]属性,它公共静态,返回string,不接受任何参数。 我甚至尝试在我的课程顶部添加[ScriptService]来查看是否有帮助,但是没有。

我已经看到这个post与ASP.NET WebMethod返回整个页面 ,有我的症状相同,但我仍然有一个问题。 我读了http://encosia.com/2008/05/29/using-jquery-to-directly-call-aspnet-ajax-page-methods/我觉得我跟着这个T,但仍然没有运气。

我正在做的jQuery调用是:

jQuery.ajax({ type: 'POST', contentType: 'application/json; charset=utf-8', data: '{}', dataType: 'json', url: 'MyPage.aspx/SomePageMethod', success: function(result){ alert(result); } }); 

根据FF3中的Firebug,请求/响应标题如下

 Response Headers Server ASP.NET Development Server/8.0.0.0 Date Tue, 24 Feb 2009 18:58:27 GMT X-AspNet-Version 2.0.50727 Cache-Control private Content-Type text/html; charset=utf-8 Content-Length 108558 Connection Close Request Headers Host localhost:2624 User-Agent Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.6) Gecko/2009011913 Firefox/3.0.6 Accept application/json, text/javascript, */* Accept-Language en-us,en;q=0.5 Accept-Encoding gzip,deflate Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive 300 Connection keep-alive Content-Type application/json; charset=utf-8 X-Requested-With XMLHttpRequest Referer http://localhost:2624/MyApp/MyPage.aspx Content-Length 2 Cookie ASP.NET_SessionId=g1idhx55b5awyi55fvorj055; 

我已经添加了一个ScriptManager到我的页面来踢,看看它是否有帮助,但没有运气。

有什么build议么?

你知道页面方法工作正常吗? 如果你使用ScriptManager,他们工作吗?

这听起来像你可能会错过一个web.config项 。 特别是HttpModules部分。

我错过了我的web.config中的一行:

 <system.web> <httpModules> <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/> </httpModules> </system.web> 

我今天再次遇到这个问题的原因不同:我拼错了“申请”

 contentType: 'application/json' 

并得到一个完整的响应,而不是对WebMethod的调用。

如果您已经尝试了所有这些,仍然可以从页面方法中返回整个页面,则可能需要确保您没有使用友好的url。 如果你正在使用它们,这个技巧可能会帮助你

在拨打电话之前,将这一行添加到您的js脚本中:

 PageMethods.set_path(PageMethods.get_path() + '.aspx'); 

把这个扔在这里作为一个旁注。 我得到的错误,由于我的stringvariables在我的HTMLstring的长度和我用来让我的AJAX调用的网站看起来像这样。

 loc = (loc.substr(loc.length - 1, 1) == "/") ? loc + "Default.aspx" : loc; $.ajax({ type: "POST", url: loc + "/" + methodName, data: "{" + args + "}", contentType: "application/json; charset=utf-8", dataType: "json", success: onSuccess, error: onFail }); 

它不能正确提取.aspx链接,所以我只是硬编码我的网页,而不是使用loc var。

我见过的大多数ajax场景都应该调用Web服务或单独的脚本处理程序,而不是页面。 这在3-5中很容易做到,在2-0中并不那么容易。 即使你弄清楚(如果)如何不加载整个页面,以下是不调用页面方法的原因:

1)页面方法可能加载的东西比整个页面加载less,但仍然远远超过你需要一个简单的Ajax调用。 2)责任分离。 该页面可能负责很好的铺设东西,而不是你在ajax方法中使用的逻辑。
3)也许你需要一些会话状态,但应该仍然可用。

我目前正在更新关于这个主题的知识…我会在这个主题中寻找这个问题的一个很好的答案,否则我会在下周发布一个。 这是我要走的方向

1)从服务器发送JSON到客户端,并使用JavaScript来更新您的页面。 – 各种框架可以很容易地从Web服务器产生JSON。
2)jQuery使得Ajax调用,json处理和客户端格式化变得有趣,而不是痛苦。