代码之家  ›  专栏  ›  技术社区  ›  vgru

jquery ajax调用失败,错误未定义

  •  0
  • vgru  · 技术社区  · 15 年前

    我的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

    1 回复  |  直到 15 年前
        1
  •  2
  •   Nick Craver    15 年前

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