我在使用jQuery.ajax()解析服务器返回的一些JSON数据时遇到了困难。
要执行我正在使用的AJAX:
$.ajax({
url: myUrl,
cache: false,
dataType: "json",
success: function(data){
...
},
error: function(e, xhr){
...
}
});
如果我返回一个项目数组,那么它工作得很好:
[ { title: "One", key: "1" }, { title: "Two", key: "2" } ]
调用成功函数并接收正确的对象。
但是,当我试图返回单个对象时:
{ title: "One", key: "1" }
调用error函数,xhr包含'parsererror‘。我曾尝试在服务器上将JSON放在括号中,然后再将其发送到网络上,但这没有什么不同。但是,如果我将内容粘贴到Javascript中的字符串中,然后使用eval()函数,它会完美地计算出它的值。
你知道我做错了什么吗?
安东尼
发布于 2008-10-30 10:29:13
您的服务器是否以内容类型"*/json"
的形式发送数据?如果没有,请相应地修改响应头。例如,发送"application/json"
就可以了。
发布于 2008-10-30 17:45:49
根据json.org规范,您的退货无效。名称总是用引号引起来的,所以您应该返回
{ "title": "One", "key": "1" }
和
[ { "title": "One", "key": "1" }, { "title": "Two", "key": "2" } ]
这可能不是您的设置的问题,因为您说它们中的一个现在可以工作,但为了正确起见,应该对其进行修复,以防将来需要切换到另一个JSON解析器。
发布于 2008-10-30 13:56:25
这个问题通常是因为您的请求接收到了错误的mime类型。在您自己的计算机上进行开发时,有时您无法从“服务器”(即您自己的计算机)接收到正确的mime类型。我曾经在浏览器中打开本地存储的文件进行开发时遇到过这个问题(例如,url是"c:/project/test.html")。
尝试使用beforeSend属性添加重写mime类型的回调函数。这将诱使代码处理json,尽管服务器发送并由您的调用代码接收错误的mime类型。下面是一些示例代码。
根据this question,正确的mime类型是application/json,但我确实知道当我尝试它时(现在是几年前),application/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...
}
});
https://stackoverflow.com/questions/249692
复制相似问题