以下JSON是我从服务器发送回jQuery脚本的内容。
{"items": [
{ "id": "116", "first_name": "Sean", "last_name": "borsen" },
{ "id": "871", "first_name": "Sergio", "last_name": "spake" },
{ "id": "1337", "first_name": "SethTest", "last_name": "Test" }
],
"message": "success"
}
我打算用这个对象来构建一个html表。当我返回这种类型的JSON时,我在Chrome中得到以下2个错误之一:
未捕获的SyntaxError:意外的标记','
或此错误
未捕获的SyntaxError:意外的标记':'
这是我的AJAX邮政编码
$.ajax({
url: "ClientEmarGroup.aspx",
datatype: 'json',
data: eval('(' + d + ')'),
success: bindData
});
以下是我在bindData函数中出现错误的行:
bindData = function (data) {
var $d = eval("(" + data + ")");
此外,如果我像这样格式化JSON项目,我会让脚本工作:
{"items": [
{ "id": "116", "name": "Sean borsen" },
{ "id": "871", "name": "Sergio spake" },
],
"message": "success"
}
但那不是我想要的。
所以我的问题是,我的JSON字符串格式化有什么问题阻止我将复杂对象发送回jQuery?
如何格式化我的JSON以返回具有2个以上属性的项目数组?
答案 0 :(得分:5)
你拼错了dataType
的错误,请注意大写T.
这会导致jQuery尝试自行查找数据类型是什么,如果您没有使用正确的内容类型提供JSON,它会尝试将其解析为其他内容,例如XML。
如果jQuery设法正确猜测数据类型,它会在调用success函数之前将字符串解析为对象,因此不应再次解析数据。
注意:如果您需要解析JSON,您应该注意eval
函数,您应该使用$.parseJSON
方法。
答案 1 :(得分:2)
您的JSON没有任何问题(您可以使用JSONLint进行检查)。
您应该使用eval()
将 JSON丢弃到本机类型,尤其是因为jQuery具有$.parseJSON()
。
答案 2 :(得分:2)
完全有效。
但是你不应该使用eval()
而是JSON.parse()
来解析JSON。要获得没有内置JSON支持的浏览器的后备,还要嵌入json2.js
答案 3 :(得分:1)
如果你告诉jQuery你期待json,它将为你解压缩并用适当的对象调用你的成功函数。您不需要自己解析响应。此外,jQuery将正确编码对象或使用URL编码的请求参数格式的字符串,因此您也不需要eval。如果您要发送JSON,那么您需要在对象上使用JSON.stringify()
并将contentType
设置为'application/json'
以及 dataType (作为@ Guffa注意到,正确地提到了'json'
$.ajax({
url: "ClientEmarGroup.aspx",
dataType: 'json',
data: d,
success: function(data) {
// now simply use the data, you don't need the eval
}
});
答案 4 :(得分:-1)
缺少关闭一个:
var bindData = function (data) {
var $d = eval("(" + data + ")");
}; // here