使用JSONP获取远程JSON失败

Failing to get remote JSON using JSONP

本文关键字:JSON 失败 JSONP 获取 使用      更新时间:2023-09-26

我正在尝试使用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,它应该接受这样的请求。

这似乎是一个服务器端问题,所以你应该检查那里发生了什么:)