【发布时间】:2014-07-30 12:22:40
【问题描述】:
我正在尝试使用 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);
});
这不会在控制台中触发任何错误,但也不会记录任何内容,就好像它没有从服务器返回任何内容一样。
为什么会这样,我该如何避免呢?
提前谢谢大家!
【问题讨论】:
-
“快速查看控制台告诉我这是一个错误的请求”——它究竟告诉你什么?
-
Failed to load resource: the server responded with a status of 400 (Bad Request) -
这是一个非常奇怪的服务器,当您添加额外的查询字符串参数时,它开始抛出
400错误。 -
您不需要
jsonp键/值,因为它已经默认为callback,我建议也删除jsonpCallback键/值并让 jQuery 自动处理给你。 -
我一开始尝试过,但奇怪的是,当我让 jQuery 自动处理回调并抛出错误时,服务器似乎不喜欢它。另外,有没有办法在回调之后手动传递第二个特定参数?
标签: javascript jquery ajax json jsonp