JQuery Ajax调用返回非json数据,但是我得到一个SyntaxError?

时间:2012-07-16 11:43:08

标签: jquery ajax json text

以下是来自页面的代码片段:

$("#add_new").button().click(function (ui,event) {
    var postdata = {
        "action":"new",
        field_kind_id:2,
        collection_id:null,
        parent_id:null,
        app_struct_id:null,
        member_id:1033,
        app_id:1003,
    };
    $.ajax({
        url: "?",
        type: "POST",
        data: postdata,
        error: function(jqXHR, textStatus, errorThrown) {
            $().toastmessage("showErrorToast",
                "AJAX call failed: "+textStatus+" "+errorThrown);
        },
        success: function(data) {
            edit_record(data);
            return false;
        }
    });
});

实际上,POST后的数据类似于:

action  new
app_id  1003
app_struct_id   null
collection_id   null
field_kind_id   2
member_id   1033
parent_id   null

响应就是这个字符串:

{\x22app_id\x22:1003,\x22member_id\x22:1033,\x22collection_id\x22:\x22-6885\x22,\x22field_kind_id\x22:2,\x22sample_id\x22:\x22\x22,\x22parent_id\x22:\x22\x22}

响应无效json数据。它有一种特殊的格式。我的问题是上面的ajax调用显示这个toast消息:

“AJAX调用失败:parsererror语法错误:非法字符”

所以似乎AJAX调用失败了。但我不明白检查语法是什么?什么样的语法? JQuery Ajax调用没有指定“dataType:json”。所以不应该有任何语法要检查。我错过了什么?

JQuery文档说“dataType”的默认值是“智能”

“智能猜测(xml,json,script或html)”

如果响应不能解释为JSON值,那么它不是JSON值,对吧?它不是一个有效的JSON值(在这种情况下,它不应该被转换)或它是(但它不应该抛出异常?)这是否意味着jQuery不够智能?

2 个答案:

答案 0 :(得分:1)

来自服务器的响应中Content-Type标头的值是多少?我希望任何有关内容格式的猜测都基于此。

答案 1 :(得分:1)

我建议您明确将dataType设置为"text"(请参阅jQuery.ajax),以便jQuery不需要猜测响应的内容类型:

$.ajax({
    url: "?",
    type: "POST",
    data: postdata,
    dataType: "text", // the type of data that you're expecting back from the server
    error: function(jqXHR, textStatus, errorThrown) {
        $().toastmessage("showErrorToast",
            "AJAX call failed: "+textStatus+" "+errorThrown);
    },
    success: function(data) {
        edit_record(data);
        return false;
    }
});

您遇到错误的原因可能如下: jQuery假设您的服务器响应是JSON格式并尝试解析它。