Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法使用JSONP获取远程JSON_Javascript_Jquery_Ajax_Json_Jsonp - Fatal编程技术网

Javascript 无法使用JSONP获取远程JSON

Javascript 无法使用JSONP获取远程JSON,javascript,jquery,ajax,json,jsonp,Javascript,Jquery,Ajax,Json,Jsonp,我正在尝试使用jQuery1.11.1检索远程JSON。远程服务器确实支持jsonp,我可以通过在浏览器中输入调用地址和?callback=foo来下载.jsonp文件 然而,当我尝试使用ajax获得它时,它失败了 $.ajax({ type: "GET", url: "http://path-to-remote-server.net/file.jsonp", dataType: 'jsonp', jsonp : "callback", jsonpCall

我正在尝试使用jQuery1.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);
});
这不会在控制台中触发任何错误,但也不会记录任何内容,就好像它没有从服务器返回任何内容一样

为什么会这样,我怎样才能避免呢

提前谢谢大家

来自:

缓存默认值:对于数据类型“script”和“jsonp”,为true、false 类型:布尔型 如果设置为false,它将强制浏览器不缓存请求的页面。注意:将缓存设置为false只能正确处理HEAD和GET请求。它的工作原理是在GET参数后面附加={timestamp}。对于其他类型的请求,不需要该参数,除非在IE8中,对GET已请求的URL进行POST


因此,将cache:true添加到Ajax参数中

需要jQuery自动添加的最后一个查询字符串参数来避免浏览器缓存。否则,如果您在站点的同一页面或任何其他页面中执行相同的JSONP调用,您将得到缓存的结果,而不是新的结果。因此,如果您的服务器支持JSONP,它应该接受这样的请求


这似乎是一个服务器端问题,因此,您应该检查那里发生了什么:

快速查看控制台会告诉我这是一个错误的请求-它到底告诉了您什么?加载资源失败:服务器以400个错误请求的状态响应这是一个非常奇怪的服务器,当您添加额外的查询字符串参数时,它开始抛出400个错误。您不需要jsonp键/值,因为这已经默认为回调,我建议也删除JSONPCCallback键/值,并让jQuery自动为您处理。起初我尝试过,但奇怪的是,服务器似乎不喜欢我让jQuery自动处理回调并抛出错误。还有,有没有办法在回调后手动传递第二个特定参数?这似乎解决了我的问题!谢谢然而,当我每X秒检索一次远程json时,打开缓存可能会有问题。由于浏览器似乎没有缓存数据,服务器似乎可以自行处理这一问题。为什么要进行向下投票?如果是因为我所说的缓存,请注意这正是OP在上面的评论中通过设置cache:true所注意到的。。。服务器缓存响应并自行处理所有下一个请求,因此您不会对每个请求都获得新的响应,从而导致潜在的意外结果编辑:对不起,我想说的是浏览器缓存响应,而不是服务器