我使用jQuery.ajax()解析从我的服务器返回的一些JSON数据时遇到困难
要执行我正在使用的AJAX:
$.ajax({
url: myUrl,
cache: false,
dataType: "json",
success: function(data){
...
},
error: function(e, xhr){
...
}
});
Run Code Online (Sandbox Code Playgroud)
如果我返回一个项目数组,那么它工作正常:
[ { title: "One", key: "1" }, { title: "Two", key: "2" } ]
Run Code Online (Sandbox Code Playgroud)
调用success函数并接收正确的对象.
但是,当我尝试返回单个对象时:
{ title: "One", key: "1" }
Run Code Online (Sandbox Code Playgroud)
调用错误函数,xhr包含'parsererror'.我已经尝试将JSON包装在服务器上的括号中,然后再将其发送到网络中,但它没有任何区别.然而,如果我将内容粘贴到Javascript中的字符串中然后使用eval()函数,它会完美地评估它.
我有什么想法我做错了吗?
安东尼
Ben*_*bee 51
根据json.org规范,您的返回无效.这些名字总是被引用,所以你应该回来
{ "title": "One", "key": "1" }
Run Code Online (Sandbox Code Playgroud)
和
[ { "title": "One", "key": "1" }, { "title": "Two", "key": "2" } ]
Run Code Online (Sandbox Code Playgroud)
这可能不是您的设置的问题,因为您说其中一个现在可以正常工作,但是如果您将来需要切换到另一个JSON解析器,则应该修复它的正确性.
Joh*_*Mee 33
JSON字符串用双引号括起来; 单引号不是有效的替代品.
{"who": "Hello World"}
Run Code Online (Sandbox Code Playgroud)
是有效的,但这不是......
{'who': 'Hello World'}
Run Code Online (Sandbox Code Playgroud)
虽然不是OP的问题,但是认为值得注意的是其他人来到这里.
Jos*_*osh 30
此问题通常是因为您的请求收到了错误的mime类型.在您自己的计算机上进行开发时,有时您没有从"服务器"(即您自己的计算机)接收正确的mime类型.通过在浏览器中打开本地存储的文件进行开发时遇到了这个问题(例如,url是"c:/project/test.html").
尝试使用beforeSend属性添加一个覆盖mime类型的回调函数.尽管服务器发送了错误的mime类型并且你的调用代码收到了错误的mime类型,但这会欺骗代码处理json.下面是一些示例代码.
根据这个问题,适当的mime类型是application/json ,但我确实知道应用程序/ j-son在我尝试时工作(现在几年前).您应该首先尝试application/json.
var jsonMimeType = "application/json;charset=UTF-8";
$.ajax({
type: "GET",
url: myURL,
beforeSend: function(x) {
if(x && x.overrideMimeType) {
x.overrideMimeType(jsonMimeType);
}
},
dataType: "json",
success: function(data){
// do stuff...
}
});
Run Code Online (Sandbox Code Playgroud)
我有这个问题,而且我使用了一点
eval('('+data+')')
Run Code Online (Sandbox Code Playgroud)
获取对象中返回的数据.但后来有其他问题在括号中出现'缺失'错误,并发现jQuery有一个专门用于评估json结构字符串的函数:
$.parseJSON(data)
Run Code Online (Sandbox Code Playgroud)
应该做的伎俩.这是除了让你的json字符串以正确的格式当然..
小智 6
如果您正在回显json响应并且您的标头与*/json不匹配,那么您可以使用内置的jQuery.parseJSON api来解析响应.
response = '{"name":"John"}';
var obj = jQuery.parseJSON(response);
alert( obj.name === "John" );
Run Code Online (Sandbox Code Playgroud)