2016-04-19 5 views
0

XHRリクエストを使用してprocessId.phpにpostメソッドでユーザーIDを送信することにより、ユーザーIDが存在するかどうかをチェックするプログラムを作成中です。私は最初にXHRリクエストをforループでidsの配列で試しましたが、何千ものXHRリクエストが一度に作成されるため、ブラウザが何千もの要素で構成されているためブラウザを強制終了しました。私はStackOverflowのポストを見つけました。これは、forループでXHRリクエストを使用すべきではなく、関数内で関数を呼び出す必要があるので、次のコードを記述してください。プログラムはうまくいくようですが、依然として何千ものリクエストが行われているのでブラウザを殺します。現在のリクエスト完了後、一度に1つのXHRリクエスト

現在/インプロセスXHR要求を完了した後、一度に1つのXHR要求を作成する方法を1週間把握しようとしています。どんな助け?私はこのための完全な機能を作成することができます任意のソリューション。

PS:jQueryを使いたくありません。

<?php 
$php_array_id = [element-1,element-2.........,element-n]; 
$js_array_id = json_encode($php_array); 
echo "var userIds = ". $js_array_id . ";\n"; 
$url = "http://example.com/idProcess.php"; 
?> 

<script> 

function processNext(i) { 
     if (i < userIds.length) { 
     var http = new XMLHttpRequest(); 
     var url = "<?php echo $url ?>"; 
     var params = "id=" + userIds[i]; 
     http.open("POST", url, true); 
     http.onreadystatechange = function() { 
      if(this.readyState == 4 && this.status == 200) { 
       if(this.responseText){ 
         document.getElementById("reports").innerHTML += "<div>ID = " + this.responseText + " Exists</div>"; 
       } 
      } 
     } 
     http.send(params); 
     i++; 
     processNext(i); 

     } 
    } 

processNext(0); 

</script> 

答えて

0

どのようにあなたはXHRを介してユーザIDの数千人を確認したいくる、asynchronous callback

セイの素晴らしい世界にこの

<script> 
var userIds = <?php echo($js_array_id) ?>; 

function processNext(i) { 
     var http = new XMLHttpRequest(); 
     var url = "<?php echo($url) ?>"; 
     var params = "id=" + userIds[i]; 
     http.open("POST", url, true); 
     http.onreadystatechange = function() { 
       if(this.readyState == 4 && this.status == 200) { 
        if(this.responseText){ 
          document.getElementById("reports").innerHTML += "<div>ID = " + this.responseText + " Exists</div>"; 
          i++; 
          if(i<userIds.length){processNext(i);} 
        } 
       } 
      } 
      http.send(params); 
    } 

processNext(0); 

+0

大きな変更点を教えてください。私は関数がstatechange関数内で呼び出されるべきだと思いますか?右? –

+0

はい、前のリクエストが終了するとすぐに別のリクエストが送信されます。 – dormouse

+0

ええ..今は、それが終わったときにリクエストを送信しています。ありがとう。 –

0

ようこそみては?

+0

私はそれが問題ではないと思います。 –

+0

上記の回答はよかったようですが、返答は返っていません。 –

関連する問題