【问题标题】:jquery 1.6.2 ajax request to aspx method always returns parsererrorjquery 1.6.2 ajax 对 aspx 方法的请求总是返回 parsererror
【发布时间】:2011-07-03 00:11:39
【问题描述】:

我已经准备好开始在这里拉头发了。尝试在 Firefox 中使用 jquery ajax 请求从我后面的代码中的方法返回简单字符串。无论我尝试什么,我总是得到 parsererror - 意外字符。根据我在网上找到的演示,我尝试了至少十几种不同的变体,但都没有奏效。

 $.ajax({
                type: 'POST',
                url: '/Search/BasicSearch.aspx/sayHello',
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                data: '{}',
                success: function (msg) {
                    alert(msg.d);
                },
                error: function (jqXHR, textStatus, errorThrown) {
                    alert(textStatus + '  ' + errorThrown);
                }
            });

--代码隐藏方法

[WebMethod]
        public static string sayHello()
        {
            return "hello world";
        }

我试过用这个方法返回一个格式正确的json字符串,还是不行。

编辑:我忘了提到这个站点将在 .NET 2.0 上运行。在尝试将下面的 Will 建议将响应格式设置为 JSON 失败后,我想我会尝试一个普通的 'ol 通用处理程序,看看会发生什么。果然,成功了。

公共类 Handler1 : IHttpHandler {

public void ProcessRequest(HttpContext context)
{
    context.Response.ContentType = "application/json";
    context.Response.Write("{\"\": \"hello world\"}");
}

public bool IsReusable
{
    get
    {
        return false;
    }
}

}

所以我假设它是 .NET 2.0 aspx 页面的潜在问题???我认为我看到的所有示例都至少使用了 3.0。

【问题讨论】:

  • 您是否尝试将 ScriptMethod 属性添加到 sayHello 方法?默认情况下,Web 方法是 SOAP 调用,返回 XML。例如[ScriptMethod(ResponseFormat = ResponseFormat.Json, UseHttpGet = true, XmlSerializeString = false)]
  • 啊,ScriptMethod 仅在 3.5+ 中受支持。您需要安装 3.5(向后兼容 2.0),或者解决这个问题,可能正如您使用 HttpHandlers 所展示的那样。其他热门歌曲:stackoverflow.com/questions/288850/…codeproject.com/KB/webservices/jsonwebservice.aspxencosia.com/…
  • @user ,我前几天也遇到了同样的问题,主要是你返回的类型,请确保你返回的类型是纯json。
  • 您可以在 2.0 中进行这项工作,但您需要安装 ASP.NET AJAX 扩展(直到 3.5 才捆绑)并修改您的 web.config 以使用它。一些信息和下载链接,尽管我认为您可能还需要 web.config 中的 HttpModule 项以用于 ASPX 页面方法:encosia.com/…

标签: jquery asp.net ajax


【解决方案1】:

试试这个,它会起作用的。

由于您返回的类型不是纯 json,或者它认为这就是它失败的原因,

删除 datatype:json 并尝试一下,它应该可以工作

$.ajax({
                type: 'POST',
                url: '/Search/BasicSearch.aspx/sayHello',
                contentType: "application/json; charset=utf-8",
                data: '{}',
                success: function (msg) {
                    alert(msg.d);
                },
                error: function (jqXHR, textStatus, errorThrown) {
                    alert(textStatus + '  ' + errorThrown);
                }
            });

【讨论】:

  • 使用这种方法,成功事件实际上会触发,但 msg 是整个页面的 html。再一次,必须是 .net 2.0 的东西。我只是要做一个基于 JSON 的服务来容纳我计划通过 jquery 调用的所有函数。
  • 我刚刚在我的工作计算机上尝试过这种方式,它可以工作。不知道我是不是家里有错字还是什么。
【解决方案2】:

试试这个:

return '{"": "hello world"}';

【讨论】:

  • 感谢您的建议。尝试使用格式正确的 json 字符串,仍然不起作用。
【解决方案3】:

在解决这个问题后,我找到了解决方案:

您告诉您的 AJAX 调用响应是 JSON 格式,这是不正确的:

contentType: "application/json; charset=utf-8", 
dataType: "json",

.NET Web 服务不会以 JSON 格式响应(至少没有配置它们)。删除 dataType 并将 contentType 设置为“charset=utf-8”。

【讨论】:

    猜你喜欢
    • 2011-06-30
    • 2013-01-21
    • 2013-11-15
    • 2011-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多