循环内的jQuery.ajax()[重复]

这个问题在这里已经有答案了
循环内的JavaScript闭包–简单实用的示例

(44个答案)

五年前关闭的

如果我在循环中调用jQuery.ajax(),它会导致当前迭代中的调用覆盖上一次调用,还是会为新请求分配一个新的XHR对象

我有一个循环可以执行此操作,而在控制台日志中,我可以看到请求已完成200 ok,但循环中最后一个请求的结果数据由请求成功回调存储

守则:

var Ajax={
页码:{},
当前_请求:null,
预取:函数(){
currentPath=location.pathname.substr(1);
if(此.pages[currentPath])
{
var current=this.pages[currentPath];
删除此.pages[currentPath];
当前['name']=当前路径;
当前['title']=$(“title”).text().replace('-'.SITE_NAME');
当前['meta_description']=$(“meta[name=description]”)attr('content');
当前['meta_keywords']=$(“meta[name=keywords]”)attr('content');
}
var _Ajax=这个;
//有问题的循环*****
for(此.pages中的var键)
{
$.ajax({
方法:“get”,
url:'http://'+location.hostname+'/'+key,
成功:功能(数据){
_pages[key]=数据;
}
}); 
调试(this.pages);
}
如果(当前)
{
此.pages[currentPath]=当前;
}       
} 
};//Ajax Obj
用于(第页中的变量i)
{
pages[pages[i]={};
}
$(函数(){
Ajax.prefetch();
});//医生准备好了吗

您需要关闭

for(此.pages中的变量k){
(功能(键){
$.ajax({
方法:“get”,
url:'http://'+location.hostname+'/'+key,
成功:功能(数据){
_pages[key]=数据;
}
}); 
调试(this.pages);
})(k) );
}

这样可以确保在每个ajax成功回调中,键始终是正确的on。
但除此之外,它应该会起作用

我用timeout而不是ajax做了一个小的闭包演示,但原理是一样的:

http://jsfiddle.net/KS6q5/

发表评论