【发布时间】:2016-06-04 08:17:43
【问题描述】:
首先,我知道网站上有类似的帖子,但都没有解决我的问题。
我想从网络服务器获取 JSON 文件。 JSON 文件由 JSONLint 检查,因此语法被验证为 OK。 JSON 数据从类似于以下的 URL 检索:www.examplewebsite.com/data.json
我的 jQuery Ajax 代码:
$.ajax({
url:url",
dataType:"jsonp",
contentType: "application/json",
type:"get",
success:function(){
console.log("OK");
},
error:function(data,status,error){
console.log(data " "status+" "+error);
}
});
这是错误:
:parsererror 错误:没有调用 jQuery222030055767520832166_1465026956736
到目前为止我做了什么:
- 添加了回调函数 (jsonpCallback: fname) (我真的很想知道,如果我们必须添加回调函数才能到达服务器端 JSON?)函数 fname 有效(
alert("OK");),但我仍然得到错误。其中一条错误消息是“未调用未定义” - 添加了 jsonp:false 选项
- 将 dataType:jsonp 更改为 json 但得到
Access-Control-Allow-Origin错误 - 仔细检查生成的 JSON 是否有效
更新1
我的json内容(用于测试):
[{
"id": 1,
"first_name": "Sara"
}, {
"id": 2,
"first_name": "Lois"
}, {
"id": 3,
"first_name": "Annie"
}, {
"id": 4,
"first_name": "Gregory"
}, {
"id": 5,
"first_name": "Fred"
}, {
"id": 6,
"first_name": "Antonio"
}, {
"id": 7,
"first_name": "Denise"
}, {
"id": 8,
"first_name": "Susan"
}, {
"id": 9,
"first_name": "Jeffrey"
}, {
"id": 10,
"first_name": "Jean"
}]
更新2 根据@Michael 的解释,我更新了标头和 ajax 代码 dataType:"json" 但我得到了 Access-Control-Allow-Origin 错误。我对 json 文件的标头检查结果:
HTTP/1.1 200 OK =>
Date => Sun, 05 Jun 2016 00:21:59 GMT
Server => Apache
Last-Modified => Sat, 04 Jun 2016 22:27:58 GMT
Accept-Ranges => bytes
Content-Length => 440
Access-Control-Allow-Origin => *
Access-Control-Allow-Headers => origin, x-requested-with, content-type
Access-Control-Allow-Methods => PUT, GET, POST, DELETE, OPTIONS
Keep-Alive => timeout=10, max=200
Content-Type => application/json
Connection => close
有什么想法吗? PS:另外,我尝试写另一个方法(IfModule)仍然有问题。
【问题讨论】:
-
您是否尝试过将数据类型全部删除?
-
你能显示从服务器返回的实际 JSONP 数据吗? JSON 和 JSONP 之间存在语法差异,因此查看生成解析错误的实际数据非常重要。
-
是的,JSON 不是 JSONp
-
@Julian 我已经试过了,我得到了 Access-Control-Allow-Origin 错误,我也添加了我的 json 文件。
-
“值得注意的是,空响应也被认为是无效的 JSON;您可以返回 {} 或 null 例如验证为 JSON。”我在这个答案stackoverflow.com/questions/6186770/… 上找到了这句话。服务器是否有可能提供一个空响应,即使它导致 200?