2015-10-01 219 views
0

我打電話AJAX功能在for循環中循環問題。但我正在逐漸1阿賈克斯成功裏面。 fiddle與阿賈克斯成功

function a(){ 
var myAr= [0]; 
    for(var i=0; i<myAr.length;i++){ 
       console.log(i +" a") 
    var root = 'http://jsonplaceholder.typicode.com'; 
     $.ajax({ 
      url: root + '/users', 
      method: 'GET' 
     }).then(function(data) { 

     console.log(i + " c") 

     }); 

       console.log(i + " b") 
    } 

} 

a() 
+2

Check out http://stackoverflow.com/questions/750486/javascript-closure-inside-loops-simple-practical-example –

回答

0

根據你的代碼console.log(i + " c")只有當Ajax調用完成後執行。對於這種功能,您必須以不同的方式觸發它。

這裏是一個工作demo

function a() { 
    var myAr= [0, 2, 3]; 
    var startIndex = 0; 

    var doAjaxCall = function(i) { 
     console.log(i +" a"); 
     var root = 'http://jsonplaceholder.typicode.com'; 
     $.ajax({ 
      url: root + '/users', 
      method: 'GET' 
     }).then(function(data) { 
      console.log(i + " c"); 
      if(i < (myAr.length - 1)) { 
       i++; 
       doAjaxCall(i); 
      } 
     }); 
    } 

    doAjaxCall(startIndex); 
} 
a(); 
1

.then()被接收到AJAX的響應時才執行。

在這一點上,i是1,因爲福爾循環結束。

如果你想原始值創建AJAX請求時,你可以創建在本地範圍與i值的新變量。這樣一來,.then()方法內部執行蓋具有原始值。

Updated fiddle.

1

u必須關閉使用這個,否則評估爲最後一個值的我執行

function a(){ 
var myAr= [0]; 
    for(var i=0; i<myAr.length;i++){ 
      console.log(i +" a") 
    var root = 'http://jsonplaceholder.typicode.com'; 
    $.ajax({ 
     url: root + '/users', 
     method: 'GET' 
    }).then(function(i) {return function(data) { 
    console.log(i + " c") 

    }}(i)); 

      console.log(i + " b") 
} 

} 

a()