Asp.net jQuery ajax调用失败,出现未定义错误

Asp.net jQuery ajax调用失败,出现未定义错误,asp.net,jquery,ajax,ashx,generic-handler,Asp.net,Jquery,Ajax,Ashx,Generic Handler,我的jQuery ajax调用失败,出现未定义的错误。我的js代码如下所示: $.ajax({ type: "POST", url: "Data/RealTime.ashx", data: "{}", contentType: "application/json; charset=utf-8", dataType: "json", timeout: 15000, dataFilter: function(data, type) { aler

我的jQuery ajax调用失败,出现未定义的错误。我的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]我应该写“当我返回任何无效的JSON对象时,调用失败”!:D

您需要有效的JSON:)

更改此行:

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

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

jQuery1.4+不能像过去那样容忍无效的JSON(无声地/以奇怪的方式失败),所以只需添加双引号就可以了。要获得一个测试JSON有效性的便捷工具,请签出JSONLint:

您拥有的不是有效的JSON,当您将其更改为以下内容时,您会得到什么:
context.Response.Write(“{”data\”:[1,2,3]}”)?非常感谢,成功了。Firebug显然在解析它时没有那么严格,所以我根本没有考虑它。你可以把它复制到一个答案中,这样我就可以接受它了。如果您使用Firebug将该字符串传递到严格的JSON解析器的Javascript实现中,您可能会遇到错误。@Pointy:现在这是有意义的,但是显示已解析对象的Firebug选项卡实际上名为“JSON”。完成:)很高兴为您解决了这个问题是的,我上次使用这个东西是在jQuery 1.3.2中,它起了作用。有趣的是,我从来没有想过尝试一下旧项目,看看会发生什么@Groo-啊,是的,这是这些最常见的问题,但正如@Pointy所说,它们更严格……但出于某种原因,如果存在本机的
JSON.parse
函数,我们可以使用浏览器更快的实现来完成这项工作,一旦所有浏览器都支持它,我们就能为所有人赢得胜利,jQuery只是在包装它,直到那时:)