2014-01-06 64 views
0

文件下面是一个代码片段,我跟打:无法下载使用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') 
}); 

不幸的是,每次都无法下载该文件,并记录一条消息。

为什么不下载该文件?

+0

跨域策略?如果你尝试使用JSONP呢? – BenM

+0

你的问题是什么?如果失败,你不想记录消息? – Praind

+0

也许是因为下载文件的大小为零? – laaposto

回答

1

这与跨域请求有关。在某些浏览器中,如果目标文件位于另一个域上(如当前所在的域),则安全性设置为无法通过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/

+0

油滑!感谢代码。我会接受这个答案。一个问题:在控制台中记录数据之前,它会输出:_Resource解释为Script,但是通过MIME类型application/x-download传输:“http://www34.zippyshare.com/d/23896885/6013/data.json?callback = jsonCallback&_ = 1389009838017" _。那是什么? –

+0

没问题!这意味着为该文件发送的头文件是“application/x-download”,但执行脚本将其视为其他内容。 ajax请求实际上将脚本标签添加到HTML文档的HEAD部分。由于脚本标记在请求的文件中遇到了奇怪的MIME类型,因此浏览器会引发警告。这不应该是一个大问题,我不认为你可以修改由zippy anway发送的这些标题...... – Hless