带有 ASP.NET WebMethod 的 Jquery AJAX 返回整个页面

Posted

技术标签:

【中文标题】带有 ASP.NET WebMethod 的 Jquery AJAX 返回整个页面【英文标题】:Jquery AJAX with ASP.NET WebMethod Returning Entire Page 【发布时间】:2010-09-25 19:25:22 【问题描述】:

我正在做一些简单的测试(为更大的项目做准备)以使用 JQuery AJAX 调用 ASP.NET WebMethod。在我的示例中,我的 WebMethod 返回一个简单的字符串。但是,当我尝试使用 JQuery 调用它时,我会返回整个 html 页面内容,而不仅仅是我的字符串。我错过了什么?

客户端:

$(document).ready(function ready() 
        $("#MyButton").click(function clicked(e) 
            $.post("Default.aspx/TestMethod",
                name:"Bob",
                function(msg) 
                    alert("Data Recieved: " + msg);
                ,
                "html"
            );
        );
    );

服务器端:

using System;
using System.Web.Services;

namespace JqueryAjaxText

    public partial class _Default : System.Web.UI.Page
    
        protected void Page_Load(object sender, EventArgs e)
        

        

        [WebMethod]
        public static string TestMethod(string name)
        
            return "The value submitted was " + name;
        
    

【问题讨论】:

【参考方案1】:

查看此链接。我使用他的其他一些帖子成功地调用了 WCF 服务。请务必查看相关文章:

http://encosia.com/2008/05/29/using-jquery-to-directly-call-aspnet-ajax-page-methods/

通读这篇文章,但本质上是:

  $("#Result").click(function() 
    $.ajax(
      type: "POST",
      url: "Default.aspx/GetDate",
      data: "",
      contentType: "application/json; charset=utf-8",
      dataType: "json",
      success: function(msg) 
        $("#Result").text(msg.d);
      
    );
);

【讨论】:

确保您的 web.config 包含与此等效的内容,具体取决于您的版本:<configuration> <system.web> <httpModules> <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> </httpModules> </system.web> </configuration> 关键部分是行 contentType: "application/json; charset=utf-8" 没有该行它将返回 HTML。 @Nathan 我和 OP 遇到了同样的问题大约一周,你的回答真的对我有很大帮助。最后我可以继续我的项目了。我真的很感激。谢谢。【参考方案2】:

我想我对 JQuery 的 $.post 命令中的“类型”参数感到困惑。在与一些人交谈之后,调用 WebMethod 的返回类型似乎必须是“json”。我试图使用“html”。一旦我将其更改为“json”,然后一切正常。显然,用 [WebMethod] 修饰的方法只返回 JSON,这就是我挂断的地方。

谢谢你们的回复。

【讨论】:

是的,这也吸引了我。感谢您的信息!【参考方案3】:

尝试将最后一个参数“html”更改为“text”。该参数指定要返回的数据类型。

【讨论】:

问题是,该方法永远不会被调用。 AJAX 调用只是接收整个页面,就像浏览器看到的那样呈现。 你能试试把“html”改成“text”吗?【参考方案4】:

我遇到了完全相同的问题:WebMethod 返回了整个 HTML 页面,而不是预期的数据。对我来说,解决方案来自 ~/App_Start/RouteConfig.cs 内部更改以下行:

settings.AutoRedirectMode = RedirectMode.Permanent;

settings.AutoRedirectMode = RedirectMode.Off;

【讨论】:

以上是关于带有 ASP.NET WebMethod 的 Jquery AJAX 返回整个页面的主要内容,如果未能解决你的问题,请参考以下文章

带有 jQ​​uery 验证的 ASP.Net MVC Ajax 表单

带有 jQ​​uery DataTables 和服务器端数据加载的 ASP.Net Webforms GridView

ASP.NET 静态 WebMethod 下载文件 [重复]

ASP.NET使用WebMethod

ASP.NET 自定义验证器 + WebMethod + jQuery

ASP.NET 3.5 使用 AJAX 调用 [WebMethod] - 500 错误