Javascript 这个JSON有什么问题?

Javascript 这个JSON有什么问题?,javascript,jquery,json,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

以下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中会出现以下两个错误之一:

未捕获的语法错误:意外标记','

还是这个错误

未捕获的语法错误:意外标记“:”

这是我的AJAX post代码

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

您的JSON没有问题(您可以使用它进行检查)


您应该使用
eval()
,将JSON转换为本机类型,特别是因为jQuery有。

您的JSON没有问题(您可以使用它来检查)

您应该使用
eval()
将JSON转换为本机类型,特别是因为jQuery已经实现了这一点。

它是完全有效的

但是您不应该使用
eval()
而是
JSON.parse()
来解析JSON。要为不具备内置JSON支持的浏览器提供回退,还需要嵌入它,这是完全有效的

但是您不应该使用
eval()
而是
JSON.parse()
来解析JSON。要为不具有内置JSON支持的浏览器获取回退,请同时嵌入缺少关闭支持的浏览器:

var bindData = function (data) {
    var $d = eval("(" + data + ")");
}; // here
缺少结束语:

var bindData = function (data) {
    var $d = eval("(" + data + ")");
}; // here

您将proeprty
数据类型拼写错误,请注意大写字母T

这会导致jQuery自己尝试找出数据类型,如果您没有为JSON提供正确的内容类型,它将尝试将其解析为其他内容,如XML

如果jQuery能够正确猜测数据类型,它将在调用success函数之前将字符串解析为对象,因此您不应该再次解析数据


注意:如果您需要解析JSON,您应该注意
eval
函数,您应该使用
$.parseJSON
方法。

您将proeprty
数据类型拼写错误,请注意大写字母T

这会导致jQuery自己尝试找出数据类型,如果您没有为JSON提供正确的内容类型,它将尝试将其解析为其他内容,如XML

如果jQuery能够正确猜测数据类型,它将在调用success函数之前将字符串解析为对象,因此您不应该再次解析数据


注意:如果需要解析JSON,应该注意
eval
函数,应该使用
$.parseJSON
方法。

如果您告诉jQuery您需要JSON,它将为您解包,并使用适当的对象调用success函数。您不需要自己解析响应。此外,jQuery将正确地编码一个对象或使用URL编码的请求参数格式的字符串,这样您也不需要在那里进行评估。如果您发送的是JSON,那么您需要在对象上使用
JSON.stringify()
,并将
contentType
设置为
'application/JSON'
,将数据类型(如@Guffa所指出的,大小写正确)设置为
'JSON'

$.ajax({
    url: "ClientEmarGroup.aspx",
    dataType: 'json',
    data: d,
    success: function(data) {
       // now simply use the data, you don't need the eval
    }
});

如果您告诉jQuery您需要json,它将为您解包,并使用适当的对象调用success函数。您不需要自己解析响应。此外,jQuery将正确地编码一个对象或使用URL编码的请求参数格式的字符串,这样您也不需要在那里进行评估。如果您发送的是JSON,那么您需要在对象上使用
JSON.stringify()
,并将
contentType
设置为
'application/JSON'
,将数据类型(如@Guffa所指出的,大小写正确)设置为
'JSON'

$.ajax({
    url: "ClientEmarGroup.aspx",
    dataType: 'json',
    data: d,
    success: function(data) {
       // now simply use the data, you don't need the eval
    }
});

在Javascript中,变量的前缀不能是
$
。虽然它是有效的,但它是丑陋的——除非它是
var$this=$(this)
@ThiefMaster-在这种情况下,我同意,但我会说,只要变量包含对jQuery对象的引用,它都是可以接受的,即,
var$form=$('form')
var$menuItems=$('li.menuitem')@ThiefMaster,感谢您在下面的回答。你抽签很快。然而,在变量名中不使用$更多的是一种偏好,而不是一种最佳实践。所讨论的var引用了jQuery对象,并且在函数的后面部分也被用作jQuery对象。
var$d=eval(“+data+”)不是jQuery对象。如果它是纯javascript,您应该使用
数据类型:“script”
让jQuery为您执行它。在javascript中,您不需要在变量前面加
$
。虽然它是有效的,但它是丑陋的——除非它是
var$this=$(this)
@ThiefMaster-在这种情况下,我同意,但我会说,只要变量包含对jQuery对象的引用,它都是可以接受的,即,
var$form=$('form')
var$menuItems=$('li.menuitem')@ThiefMaster,感谢您在下面的回答。你抽签很快。然而,在变量名中不使用$更多的是一种偏好,而不是一种最佳实践。所讨论的var引用了jQuery对象,并且在函数的后面部分也被用作jQuery对象。
var$d=eval(“+data+”)不是jQuery对象。如果它是纯javascript,您应该使用
数据类型:“script”
让jQuery为您执行它。是的,我试过了,但它也不起作用。肯定是出了什么问题,因为我今天早上无法重现这个问题。是的,我试过了,但也不起作用。因为今天早上我无法重现这个问题,所以肯定是出了什么问题。尼斯卡