2016-12-13 12 views
0

私はこの質問が以前に尋ねられていることを知っていますが、結果のない回答を適用しようとしました。Javascript XMLHttpRequest for forループ

私はforループで同じドメイン上で複数のリクエストを実行しようとしていますが、それは自分のアレイの最後のレコードに対してのみ機能しています。 1つのリクエストで試してみるとうまくいきます。わかりません。ここで

は、私が使用するコードです:

var xhr = new XMLHttpRequest(); 
var idArray = ['1', '2', '3', '4', '5']; 

for(var i = 0;i < idArray.length;i++) { 
    xhr.open('PUT', 'https://www.domain.com/url/' + idArray[i]); 
    xhr.setRequestHeader('Authorization', authorizationToken); 
    xhr.send(null); 
    var test = setInterval(function() { 
     if(xhr.readyState != 4) { 
      //someCode 
     } else { 
      clearInterval(test); 
     } 
    }, 1000); 
    xhr.onreadystatechange = function() { 
     if (xhr.readyState == 4) { 
      if(xhr.status != 200) { 
       //someCode 
      } 
     } 
    } 
} 

また、私はこれを試してみたが、まだ何の結果:

var xhr = new XMLHttpRequest(); 
var idArray = ['1', '2', '3', '4', '5']; 

for(var i = 0;i < idArray.length;i++) { 
    (function(i) { 
     xhr.open('PUT', 'https://www.domain.com/url/' + idArray[i]); 
     xhr.setRequestHeader('Authorization', authorizationToken); 
     xhr.send(null); 
     var test = setInterval(function() { 
      if(xhr.readyState != 4) { 
       //someCode 
      } else { 
       clearInterval(test); 
      } 
     }, 1000); 
     xhr.onreadystatechange = function() { 
      if (xhr.readyState == 4) { 
       if(xhr.status != 200) { 
        //someCode 
       } 
      } 
     } 
    })(i); 
} 

私は私が間違ってやって見ませんよ。

答えて

0

あなたの第二の試みはかなり近いですが、要求を別のXMLHttpRequestオブジェクトを作成する必要があり、生命維持の中に、***コメントと移転行を参照してください。技術的には

var idArray = ['1', '2', '3', '4', '5']; 

for(var i = 0;i < idArray.length;i++) { 
    (function(i) { 
     var xhr = new XMLHttpRequest(); // *** 
     xhr.open('PUT', 'https://www.domain.com/url/' + idArray[i]); 
     xhr.setRequestHeader('Authorization', authorizationToken); 
     xhr.send(null); 
     var test = setInterval(function() { 
      if(xhr.readyState != 4) { 
       //someCode 
      } else { 
       clearInterval(test); 
      } 
     }, 1000); 
     xhr.onreadystatechange = function() { 
      if (xhr.readyState == 4) { 
       if(xhr.status != 200) { 
        //someCode 
       } 
      } 
     } 
    })(i); 
} 

を、 iをそこに作成しているコールバックのどこにも使用していないので、iを渡してIIFEにパラメータとして渡す必要はありません(ただし、IIFEが必要なので別途xhr )。


サイドノート:インターバルタイマが何のためにあるのかを確認しますので、私はそれを残してきたが、あなたのonreadystatechangeハンドラ呼び出されるわけではありません、タイマーでそれをバックアップする必要はありません。

+1

大変ありがとうございます。 – Khalenn