Javascript 这个JSON有什么问题?
以下JSON是我从服务器发送回jQuery脚本的内容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
{"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+”)如果输入是JSON,则代码>不是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+”)如果输入是JSON,则代码>不是jQuery对象。如果它是纯javascript,您应该使用数据类型:“script”
让jQuery为您执行它。是的,我试过了,但它也不起作用。肯定是出了什么问题,因为我今天早上无法重现这个问题。是的,我试过了,但也不起作用。因为今天早上我无法重现这个问题,所以肯定是出了什么问题。尼斯卡