我正在尝试使用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);
});
这不会在控制台中触发任何错误,但也不会记录任何内容,就好像它没有从服务器获得任何返回。
为什么会这样,我怎样才能避免呢?
提前感谢大家!
从手册:
缓存(默认:true, false为数据类型'script'和'jsonp')
类型:布尔
如果设置为false,它将强制浏览器不缓存所请求的页面。注意:将缓存设置为false只对HEAD和GET请求有效。它的工作原理是在GET参数后面附加"_={timestamp}"。其他类型的请求不需要此参数,除非在IE8中,当POST向已经被GET请求过的URL发出时。
因此将cache: true
添加到Ajax参数中。
需要jQuery自动添加的最后一个查询字符串参数,以避免浏览器缓存。否则,如果您在站点的相同或任何其他页面中执行相同的JSONP调用,您将获得缓存结果而不是新结果。所以如果你的服务器支持JSONP,它应该接受这样的请求。
这似乎是一个服务器端问题,所以你应该检查那里发生了什么:)