文件下面是一个代码片段,我跟打:无法下载使用jQuery
$.get('http://www51.zippyshare.com/d/70229620/44835/data.json', function (data) {
console.log(data);
}).fail(function() {
console.log('I failed to download json')
});
不幸的是,每次都无法下载该文件,并记录一条消息。
为什么不下载该文件?
文件下面是一个代码片段,我跟打:无法下载使用jQuery
$.get('http://www51.zippyshare.com/d/70229620/44835/data.json', function (data) {
console.log(data);
}).fail(function() {
console.log('I failed to download json')
});
不幸的是,每次都无法下载该文件,并记录一条消息。
为什么不下载该文件?
这与跨域请求有关。在某些浏览器中,如果目标文件位于另一个域上(如当前所在的域),则安全性设置为无法通过JavaScript检索JSON(或其他文件)的级别。在铬我得到以下错误:
XMLHttpRequest cannot load http://www51.zippyshare.com/d/70229620/44835/data.json. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://xxx.xxx.xxx.xxx' is therefore not allowed access.
解决此问题的一种方法是通过使用JSONP,旨在避免此问题。尽管你需要控制所请求文件的输出。因此,在你的情况下(从zippyshare获取json文件),如果所讨论的文件是动态文件,这可能会变得非常复杂。
这里有一个小JSONP例如:
$.ajax({
type: 'GET',
url: "http://www51.zippyshare.com/d/70229620/44835/data.json",
async: false,
jsonpCallback: 'jsonCallback',
contentType: "application/json",
dataType: 'jsonp',
success: function(json) {
console.log(json.data);
},
error: function(e) {
console.log(e.message);
}
});
重要的是,你的data.json内容现在包裹成一个函数调用,就像这样:
jsonCallback(
{
"data": "value"
}
);
更多的信息和解释可在这里找到:http://www.jquery4u.com/json/jsonp-examples/
油滑!感谢代码。我会接受这个答案。一个问题:在控制台中记录数据之前,它会输出:_Resource解释为Script,但是通过MIME类型application/x-download传输:“http://www34.zippyshare.com/d/23896885/6013/data.json?callback = jsonCallback&_ = 1389009838017" _。那是什么? –
没问题!这意味着为该文件发送的头文件是“application/x-download”,但执行脚本将其视为其他内容。 ajax请求实际上将脚本标签添加到HTML文档的HEAD部分。由于脚本标记在请求的文件中遇到了奇怪的MIME类型,因此浏览器会引发警告。这不应该是一个大问题,我不认为你可以修改由zippy anway发送的这些标题...... – Hless
跨域策略?如果你尝试使用JSONP呢? – BenM
你的问题是什么?如果失败,你不想记录消息? – Praind
也许是因为下载文件的大小为零? – laaposto