以下是来自页面的代码片段:
$("#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不够智能?
答案 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格式并尝试解析它。