【问题标题】:jQuery ajax call failing with undefined errorjQuery ajax 调用失败并出现未定义的错误
【发布时间】:2010-06-05 10:37:32
【问题描述】:

我的 jQuery ajax 调用因 undefined 错误而失败。我的 js 代码如下所示:

$.ajax({
   type: "POST",
   url: "Data/RealTime.ashx",
   data: "{}",
   contentType: "application/json; charset=utf-8",
   dataType: "json",
   timeout: 15000,
   dataFilter: function(data, type) {
       alert("RAW DATA: " + data + ", TYPE: "+ type);
       return data;
   },
   error: function(xhr, textStatus, errorThrown) {
       alert("FAIL: " + xhr + " " + textStatus + " " + errorThrown);
   },
   success: function(data) {
       alert("SUCCESS");
   }
});

我的 ajax 源是一个通用的 ASP.NET 处理程序:

[WebService(Namespace = "http://my.website.com")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class RealTime : IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        context.Response.ContentType = "application/json";
        context.Response.Write("{ data: [1,2,3] }");
        context.Response.End();
    }

    public bool IsReusable
    { get { return false; } }
}

现在,如果我在处理程序中返回一个空对象 ("{ }"),则调用将成功。但是当我返回任何其他 JSON 对象时,调用会失败。

dataFilter 处理程序显示我正在接收正确的对象。 Firebug 按预期显示响应,JSON 选项卡显示对象已正确解析。

那可能是什么原因呢?

[Edit] 我应该写“当我返回任何 invalid JSON 对象时,调用失败”! :D

【问题讨论】:

  • 你所拥有的不是有效的JSON,当你把它改成这样你会得到什么:context.Response.Write("{ \"data\": [1,2,3] }");
  • 非常感谢,成功了。 Firebug 对解析的要求显然不那么严格,所以我完全没有考虑。您可以将其复制到答案中,以便我接受。
  • Firebug 不解析 JSON,它正在解析 Javascript - 有区别。如果您使用 Firebug 将该字符串传递到严格 JSON 解析器的 Javascript 实现中,您会得到错误。
  • @Pointy:现在说得通了,但显示已解析对象的 Firebug 选项卡 实际上名为“JSON”。
  • 完成 :) 很高兴为您解决了问题

标签: asp.net jquery ajax ashx generic-handler


【解决方案1】:

您需要有效的 JSON! :)

改变这一行:

context.Response.Write("{ data: [1,2,3] }");

到这里:

context.Response.Write("{ \"data\": [1,2,3] }");

jQuery 1.4+ 不再像以前那样容忍无效的 JSON(默默地/以奇怪的方式失败),所以只需添加双引号就可以了。如需测试 JSON 有效性的便捷工具,请查看 JSONLint:http://www.jsonlint.com/

【讨论】:

  • 是的,我上次使用这个东西是在 jQuery 1.3.2 中,它确实有效。有趣的是,我从来没有想过尝试旧项目并看看会发生什么。 :)
  • @Groo - 啊,是的,这是最常见的问题,但正如@Pointy 所说,它们更严格......但出于某种原因,如果存在原生 JSON.parse 函数,那就是这样,我们可以使用浏览器更快的实现来完成这项工作,一旦所有浏览器都支持它属性,每个人都会赢,直到那时 jQuery 只是包装它:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-01-22
  • 1970-01-01
  • 2014-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-12
相关资源
最近更新 更多