这个JSON有什么问题吗?

时间:2011-04-23 12:13:06

标签: javascript jquery json

以下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个以上属性的项目数组?

5 个答案:

答案 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