2017-07-30 25 views
0

我的ajax請求對'for'循環有問題。我知道有很多在這裏,所以請原諒我不會條最佳實踐,我剛開始=]在jquery和ajax中重複最後一個元素

因此,這裏是我的代碼:

var ServersObject = $("tr td:nth-child(2)"); 
var ServerArray = $.makeArray(ServersObject); 
console.log(CurrentServer + 'outside ajax'); 
for (var i = 0; i < ServerArray.length; i++) { 
    var CurrentServer = ServerArray[i].outerText; 

    $.ajax({ 
     type: 'GET', 
     data: { 'Server': CurrentServer }, 
     url: 'http://localhost/check', 
     success: function(data) { 
      if (data == '200') { 
       console.log(CurrentServer + 'inside ajax'); 
       $("td:contains('" + CurrentServer + "')").next().text("OK"); 
      } else { 
       $("td:contains('" + CurrentServer + "')").next().text("Not OK"); 
      } 
     } 
    }); 
} 

正如你可以看到我有兩個' Console.log'消息和一組服務器。 「外部ajax」消息顯示所有服務器應該一個一個,但「內部ajax」一個只顯示陣列中的最後一個服務器.. 我在做什麼錯了?

謝謝!

+0

4 answeres已經被提出。你能提供一些反饋嗎? – jeanfrg

回答

0

您需要使用閉包來修復回調中的值,因爲在遍歷數組時,CurrentServer會發生變化。有幾種方法可以做到這一點。這裏是一個:

for (var i = 0; i < ServerArray.length; i++) { 
    var CurrentServer = ServerArray[i].outerText; 

    (function(cs) { 
     $.ajax({ 
     type: 'GET', 
     data: { 'Server': cs }, 
     url: 'http://localhost/check', 
     success: function(data) { 
      if (data == '200') { 
       console.log(cs + 'inside ajax'); 
       $("td:contains('" + cs + "')").next().text("OK"); 
      } else { 
       $("td:contains('" + cs + "')").next().text("Not OK"); 
      } 
     } 
     }); 
    })(CurrentServer); 
} 

的想法是,你傳遞給函數(標量對象,如字符串)的值不會改變之外的功能。因此,通過以這種方式將值傳遞給函數(閉包),您可以「修復」成功回調中代碼所引用的值。

0

使用這一個。

for (var i = 0; i < ServerArray.length; i++) { 
    var CurrentServer = ServerArray[i].outerText; 

    $.ajax({ 
     type: 'GET', 
     data: { 'Server': CurrentServer }, 
     url: 'http://localhost/check', 
     success: function (data) { 
      var newServer = ServerArray[i].outerText; 
      if (data == '200') { 
       console.log(newServer + 'inside ajax'); 
       $("td:contains('" + newServer + "')").next().text("OK"); 
      } else { 
       $("td:contains('" + newServer + "')").next().text("Not OK"); 
      } 
     } 
    }); 
} 
0

裏面的Ajax只記錄一次?聽起來像地位是200只一次。它可能是另一個.ajax的快速執行,它會覆蓋(因爲缺少一個更好的詞)前,它可以成功?

而且,在你提供的代碼外日誌永遠不會成功(應該是循環我猜裏面)

相關問題