1

私は Ajax 呼び出しを使用して開発していましたが、デバッグ中に、Ajax が実際に想像していたよりも多くの要求/応答を送信していることがわかりました。

ずっと前に、舞台裏で何が起こっているかを説明する優れたドキュメントを入手しましたが、紛失してしまいました。

現在、Web 上の Ajax チュートリアルでは、コーディング方法と IF ステートメントのみのチェックについてのみ説明されており、私のような人にとっては適切な説明にはreadystate == 4なりstatus == 200ません。

以下のコードでフローをテストしましたが、出力は奇妙だと思います。私の混乱は、準備ができている 4 状態が 2 回表示されるのはなぜですか? 定義によれば、ready 4完了を意味するので、2 回完了する必要はありませんか?

出力

START
ready 1                //loading
START
ready 2                //loaded
ready 2 status=200     //loaded
START
ready 3                //interactive
ready 3 status=200     //interactive
START
ready 4                //complete
START
ready 4                //complete   ... again???

テスト コード スニペット

xmlHttp.onreadystatechange = function() {

                alert("START");

                if(xmlHttp.readyState == 0) {
                    alert('ready 0');
                    alert('ready 0 status=' + xmlHttp.status);
                }

                if(xmlHttp.readyState == 1) {
                    alert('ready 1');
                    alert('ready 1 status=' + xmlHttp.status);
                }

                if(xmlHttp.readyState == 2) {
                    alert('ready 2');
                    alert('ready 2 status=' + xmlHttp.status);
                }

                if(xmlHttp.readyState == 3) {
                    alert('ready 3');
                    alert('ready 3 status=' + xmlHttp.status);
                }

                if(xmlHttp.readyState == 4 && xmlHttp.status == 200) {
                    alert('ready 4');
                } 
   }                 
4

1 に答える 1

4

さまざまなブラウザーが AJAX 呼び出しと readyState でどのように動作するかについては 、 quirksmodeで読むことができます。

コマンドを使用するとreadystate 4が発行されると主張するこのリンクを見つけましAbortた(テストしていません)-使用していAbortますか?

于 2010-12-16T15:15:15.190 に答える