0

HTTP リクエストを送信するときの http リクエストの while ループで、次のリクエストを少し待って、前のリクエストからのレスポンスを取得できるようにします。setTimeout関数は役立ちますか?

コードは次のとおりです。

while(i <= 50){
            http.onreadystatechange = function(){       
                    if(http.readyState == 4){
                        getPosts(http.responseText , i);
                        //alert(http.responseText);
                    }
            }
            http.open("get","../php/php.php?q=getBody&id=comment"+i);       
            http.send();
            //sleep(0); this another function in i send a request to php file to make asleep 
            i++;
        }

また、ここに firebug で何が起こるかの写真があります: firebug error photo

4

3 に答える 3

1

を介して 2 番目のメソッドの実行を遅らせることはできますが、setTimeoutこれは Javascript で行う最善の方法ではありません。

サーバーからの応答が来たら、コールバックを実行できます。そのコールバックは応答を処理し、次の要求を送信する必要があります。

ライブラリを使用して AJAX を処理することは一般的であり、使用するライブラリには、開始するためのコールバックの問題に関するドキュメントがたくさんあると確信しています。または、プレーン JS では、onreadystatechangeコールバックである XHR オブジェクトの属性を調べることができます。

https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest

于 2013-09-04T14:42:32.330 に答える
1

HTTP リクエストを送信する前のリクエストからのレスポンスを取得できるように、次のリクエストを少し待ちます。

ここでは、コールバックのユース ケースを定義しています。

通常、AJAX 関数には、応答が返されたときに起動する関数をバインドできる、success または complete 関数があります。1 つの結果が前の結果に依存しない限り、ループ内で ajax 呼び出しを行うことができ、コールバックは各応答の処理を個別に処理するため、コードで少し待つ必要はありません。コールバックを発生させるイベント。

http://api.jquery.com/jQuery.ajax/

jquery ajax 呼び出しの「complete」パラメーターを見てください。

于 2013-09-04T14:54:08.007 に答える
0

JavaScript にはスリープ機能がなく、その性質上、スリープ機能によって問題が発生します。

関数の実行を遅らせることはできますがsetTimeout、その場合 (および神話上のスリープ関数) は、要求を送信して応答を取得するのにかかる時間を知っている必要があります。ネットワークはそれほど予測可能ではないため、それを知ることはできません。

新しいリクエストを送信する前にレスポンスを取得するまで待ちたい場合は、前のリクエストのload/readystatechangeハンドラに新しいリクエストを送信するコードを配置します。

于 2013-09-04T14:39:19.303 に答える