【发布时间】:2012-05-04 14:14:23
【问题描述】:
当我使用相同的 jsonpCallback 函数执行多个 jsonp 请求时,我在 jQuery 中遇到问题。似乎只有其中之一触发了回调函数。 JSONP 请求是否以某种方式相互覆盖?
下面是向 github 发出 2 次 jsonp 请求的示例,即使两个 firebug 都显示它们都返回,但只为其中一个调用回调函数 getName:
function getName(response){
alert(response.data.name);
}
function userinfo(username){
$.ajax({
url: "https://api.github.com/users/" + username,
jsonpCallback: 'getName',
dataType: "jsonp"
});
}
users = ["torvalds", "twitter", "jquery"]
for(var i = 0; i < users.length; i++){
userinfo(users[i]);
}
【问题讨论】:
-
如果它们是两个成功的响应,那么我希望该函数会被触发两次。验证响应流文本。
-
这就是我所期望的。但事实并非如此。
-
我 认为(查看 jquery 代码并不是最简单的)当指定 jsonpCallback 时,jquery 将始终为您创建一个该名称的函数。它保存当前的(如果已定义)并在以后恢复它。我看到的基本上是竞争条件,并发 jsonP 请求“随机”失败。来自代码(v3.2.1): window[ callbackName ] = function() { responseContainer = arguments; };你同意吗?
标签: javascript ajax jquery jsonp