2016-11-09 36 views
-2

我有这样的数组urls = ['url1','url2','url3'];我该如何跟踪数组索引,所以每个Ajax调用我可以删除一个元素。如何在ajax调用期间跟踪数组索引

这里是什么我想

var my_delay = 2000; 
 
var urls = ['url1','url2','url3']; 
 

 

 
$(function() { 
 
    callAjax(); 
 
}); 
 

 

 
function callAjax() { 
 
    /*$.ajax({ 
 
     // my ajax params .............. 
 
     success: function(data){ 
 
     \t \t if(urls.length != 0){ 
 
        console.log('must be called only 3 times'); 
 
     \t \t setTimeout(callAjax, my_delay); 
 
        urls.shift(); 
 
     \t \t } 
 
     } 
 
    }); */ 
 
    console.log('must be called only 3 times'); 
 
    console.log('in real situation i will going to use above commented ajax code'); 
 
if(urls.length != 0){ // stop here but you are not stoppping why? 
 
setTimeout(callAjax, my_delay); 
 
    urls.shift(); 
 
    } // end of if 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>

问:我想停止Ajax调用时存在urls[]没有元素请记住ajax打算请在该场景中拨打php page我也想跟踪array index

+0

究竟是什么你想在这里实现吗?你是不是想调用相同ajax调用3个单独的url?为什么你不只是遍历'urls',并在该循环中执行ajax调用? – Cerbrus

+0

我看到你没有达到你的教程中有关javascript的循环部分 – madalinivascu

+0

@Cerbrus什么循环,我没有看到任何循环? – madalinivascu

回答

1

使用全局变量和递归函数

var i = 0; 
callAjax(urls[i]); 
function callAjax(url) { 
$.ajax({ 
url:url, 
success:function() { 
if (i< urls.length) 
    i++; 
    callAjax(urls[i]); 
} 
}); 
} 
+0

我认为我达到了我的解决方案,我会尽快接受 – EaBangalore

+1

非常感谢你 – EaBangalore

+0

很高兴有帮助:P – madalinivascu

-2

也许你编辑本:$.when()加入jquery 1.5

http://devdocs.io/jquery/jquery.when

通过这种方式,毕竟阿贾克斯完成后,你会得到array结果保持了之前的轨道。

+0

我的答案有什么问题吗? – TomIsion

+0

@Tomlsion,我想跟踪数组元素只有 – EaBangalore

+0

@EBBangalore说实话,我无法实现你的目标。也许你想发送三个Ajax在一系列网址中?那么得到相同订单的回应? – TomIsion

1

试试吧 $(函数(){

var urls = ['url1','url2','url3'], 

    function callAjax(url) { 
     alert(url); 
    } 

    // for each array element call function callAjax 
    $.each(urls, function(i, url) { 
     callAjax(url); 
    }); 

});