当前位置:  开发笔记 > 编程语言 > 正文

jQuery不会从AJAX查询中解析我的JSON

如何解决《jQuery不会从AJAX查询中解析我的JSON》经验,为你挑选了6个好方法。

我使用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" } ]

调用success函数并接收正确的对象.

但是,当我尝试返回单个对象时:

{ title: "One", key: "1" } 

调用错误函数,xhr包含'parsererror'.我已经尝试将JSON包装在服务器上的括号中,然后再将其发送到网络中,但它没有任何区别.然而,如果我将内容粘贴到Javascript中的字符串中然后使用eval()函数,它会完美地评估它.

我有什么想法我做错了吗?

安东尼



1> Tomalak..:

您的服务器是否将数据作为Content-Type发送"*/json"?如果没有,请相应地修改响应标头."application/json"例如,发送会很好.



2> Ben Combee..:

根据json.org规范,您的返回无效.这些名字总是被引用,所以你应该回来

{ "title": "One", "key": "1" }

[ { "title": "One", "key": "1" }, { "title": "Two", "key": "2" } ]

这可能不是您的设置的问题,因为您说其中一个现在可以正常工作,但是如果您将来需要切换到另一个JSON解析器,则应该修复它的正确性.


实际上,在jQuery 1.4中(例如)`{key:'val'}`是无效的JSON.

3> John Mee..:

JSON字符串用引号括起来; 单引号不是有效的替代品.

{"who": "Hello World"}

是有效的,但这不是......

{'who': 'Hello World'}

虽然不是OP的问题,但是认为值得注意的是其他人来到这里.



4> Josh..:

此问题通常是因为您的请求收到了错误的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...
 }
});



5> Jubair..:

我有这个问题,而且我使用了一点

eval('('+data+')')

获取对象中返回的数据.但后来有其他问题在括号中出现'缺失'错误,并发现jQuery有一个专门用于评估json结构字符串的函数:

$.parseJSON(data)

应该做的伎俩.这是除了让你的json字符串以正确的格式当然..



6> 小智..:

如果您正在回显json响应并且您的标头与*/json不匹配,那么您可以使用内置的jQuery.parseJSON api来解析响应.

response = '{"name":"John"}';
var obj = jQuery.parseJSON(response);
alert( obj.name === "John" );

推荐阅读
php
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有