37

jQuery 1.3.2,ASP.NET 2.0。对 PageMethod (WebMethod) 进行 AJAX 调用会返回完整/整个页面,而不仅仅是响应。page 方法上的断点表明它永远不会被命中。我的方法上有 [WebMethod] 属性,它公共静态的,返回字符串并且不接受任何参数。我什至尝试在我的班级顶部添加 [ScriptService] 以查看它是否有帮助,但它没有。

我已经看到这篇文章Jquery AJAX with ASP.NET WebMethod Returning Entire Page有我相同的症状,但我仍然遇到问题。我读了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 只是为了看看它是否有帮助,但那里没有运气。

有什么建议么?

4

8 回答 8

28

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

听起来您可能缺少web.config 条目。特别是 HttpModules 部分。

于 2009-02-24T19:22:18.060 回答
24

我的 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>
于 2009-04-15T17:25:11.747 回答
13

我今天又遇到了这个问题,原因不同:我把“应用程序”拼错了

contentType: 'application/json'

并且获得了整页响应,而不是对 WebMethod 的调用。

于 2010-06-16T14:26:37.363 回答
7

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

在调用之前在你的 js 脚本中添加这一行:

PageMethods.set_path(PageMethods.get_path() + '.aspx');
于 2014-08-08T18:28:00.457 回答
1

把它扔在这里作为旁注。由于我的 HTML 字符串中的字符串变量的长度以及我用来调用我的 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。

于 2011-02-15T05:58:00.233 回答
1

在 RouteConfig.cs 中评论以下行对我有用

 settings.AutoRedirectMode = RedirectMode.Permanent;
于 2019-04-10T15:27:11.993 回答
0

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

1) page 方法加载的内容可能比整个页面加载少,但仍然远远超过简单的 ajax 调用所需的内容。2) 糟糕的职责分离。该页面可能负责很好地布置内容,而不是您在 ajax 方法中使用的逻辑。
3)也许您需要一些会话状态,但这应该仍然可用。

我目前正在更新我对这个主题的知识......我会在这个帖子中寻找这个问题的一个很好的答案,或者我会在下周发布一个。这是我前进的方向

1)从服务器发送 JSON 到客户端,并使用 javascript 更新您的页面。- 多种框架使从 Web 服务器生成 JSON 变得容易。
2) JQuery 使 ajax 调用、json 处理和客户端格式化变得有趣,而不是痛苦。

于 2009-02-25T07:16:25.020 回答
0

经过近两个小时的尝试,我终于解决了所有问题。@Marvin Zumbado 的评论帮助了我。我的网址中缺少 .aspx。我知道这不是我作为程序员的最佳时刻!

于 2017-11-29T17:47:41.223 回答