0

我的 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 选项卡显示对象已正确解析。

那么可能是什么原因呢?

[编辑]实际上我应该写“当我返回任何无效的 JSON 对象时,调用失败”!:D

4

1 回答 1

2

您需要有效的 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/

于 2010-06-05T11:19:55.610 回答