我试图使用jQuery 1.11.1检索远程JSON。远程服务器 支持jsonp,我只需在浏览器中输入呼叫地址和?callback=foo
即可下载.jsonp文件。
然而,当我尝试使用ajax获取它时,它失败了。
$.ajax({
type: "GET",
url: "http://path-to-remote-server.net/file.jsonp",
dataType: 'jsonp',
jsonp : "callback",
jsonpCallback: "e",
success: function(r) {
console.log(r);
}
});
快速查看控制台告诉我这是一个糟糕的请求,可能是因为看起来jQuery传递了第二个不需要的参数,使请求看起来像这样:
http://path-to-remote-server.net/file.jsonp?callback=e&_=1406722474006
即使我省略了jsonp和jsonpCallback选项,也会发生这种情况。然后请求如下所示:
http://path-to-remote-server.net/file.jsonp?callback=jQuery111106199050471186638_1406722685544&_=1406722685545
使用捷径$ .getJSON也不起作用,但不是出于同样的原因:
$.getJSON("http://path-to-remote-server.net/file.jsonp?callback=e", function(r){
console.log(r);
});
这不会触发控制台中的任何错误,但也不会记录任何错误,就好像它没有从服务器返回任何内容。
为什么会这样,我该如何避免呢?
提前谢谢大家!
答案 0 :(得分:0)
来自the manual:
缓存(默认值:true,false表示dataType'脚本'和' jsonp')
类型:布尔
如果设置为false,它将强制浏览器不缓存请求的页面。注意:将缓存设置为false只能与HEAD和GET请求一起正常工作。它的工作原理是附加" _ = {timestamp}"到GET参数。其他类型的请求不需要该参数,但在IE8中,当对已经由GET请求的URL进行POST时,该参数除外。
所以将cache: true
添加到Ajax参数中。
答案 1 :(得分:-1)
需要jQuery自动添加的最后一个查询字符串参数,以避免浏览器缓存。否则,如果您在站点的同一页面或任何其他页面中执行相同的JSONP调用,您将获得缓存结果而不是新结果。因此,如果您的服务器支持JSONP,它应该接受这样的请求。
这似乎是一个服务器端问题,所以你应该检查那里发生了什么:)