2017-07-30 10 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"); 
      } 
     } 
    }); 
} 

あなたは、私は2つの「を持って見ることができるようにConsole.log 'メッセージ、およびサーバーの配列が含まれています。 "outside ajax"メッセージは、すべてのサーバを1つずつ表示するようになっていますが、 "inside ajax"は最後のサーバだけを表示しています。 何が間違っていますか?

ありがとうございます!

+0

4 answeresが提案されている(それは私が推測するループ内でなければなりません)。いくつかのフィードバックをいただけますか? – jeanfrg

答えて

0

コールバックの値を固定するには、配列を反復する際に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は1回のみログに記録されますか?状態のような音は200回だけです。それは成功することができる前に、別の.ajaxの迅速な実行が上書きされています(より良い言葉の欠如のため)?

また、外部のログが動作しないだろう、あなたの提供されたコードに

関連する問題