0

这是来自页面的代码片段:

$("#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 SyntaxError:非法字符”

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

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

“智能猜测(xml、json、脚本或 html)”

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

4

2 回答 2

2

我建议你明确设置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 格式并尝试解析它。

于 2012-07-16T12:17:28.860 回答
1

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

于 2012-07-16T11:47:16.797 回答