0

私のアプリケーションでは、$(document).ready()関数内で複数の ajax 呼び出しを行います。問題は、ajax 呼び出しが返されるまでブラウザが「読み込み中」状態のままになることです。そして、これらの ajax 呼び出しが完了するまでに約 15 ~ 20 秒かかるため、ページの読み込み時間が非常に長くなります。
私の予想では、ajax呼び出しは非同期であるため、すべてのページ読み込みリクエストが完了すると、ブラウザーは「読み込み中状態」から抜け出し、ajax 呼び出しがいつ終了するかは気にしませんでした。

電話をかける必要がある他のイベントはありajaxますか? ajaxイベントコールバックに呼び出しを入れようとしましたwindow.onloadが、それでも同じ問題があります。

編集: コードは非常に簡単です。スクリプトをロードするヘッドにいくつかのスクリプト タグを含む HTML ファイルがあります。

<head>
    <script src="script1.js"></script>
    <script src="script2.js"></script>
</head>

私のスクリプトの1つに次のものがあります。

$(document).ready( 
     // 3 ajax calls
 );

Ajax 呼び出しで JSON をフェッチします。現在、これら 3 つの ajax 呼び出しがすべて返された場合にのみ、ブラウザーが「読み込み中」状態から抜け出すことが開発ツールキットでわかります。また、ページ読み込みのネットワーク リクエストがキャッシュされると、ブラウザがこれらの ajax 呼び出しを待機しないことにも気付きました。ただし、キャッシュが空の場合、すべてのページ読み込みリクエストを完了するのに約 3 ~ 4 秒かかります。この場合、ajax 呼び出しによってブラウザが「読み込み中状態」のままになります。

助けてください。ありがとう!

4

4 に答える 4

0

わかった!成功関数でajax呼び出しを呼び出さないのはなぜですか。

$.ajax({
.........
    success:function(){
        your load stuff here

       $.ajax({
           .........
           success:function(){
               your load stuff here
           }
      });
    }      // end of success of first ajax call
});

または、次の場所で使用できますcomplete function

$.ajax({
    .........
    success:function(){
        your load stuff here
    },
    complete:function(){
       $.ajax({
          .........
          success:function(){
               your load stuff here
          },
          complete:function(){

          }
       });
    }
});
于 2012-12-26T08:09:15.400 に答える
-3

Ajax呼び出しは真に非同期ではありません。Ajaxはページポストバックなしでサーバー呼び出しを行うのに役立ちます。

JavaScriptからサーバーサイドメソッドを呼び出すと仮定します。サーバーサイドメソッドを呼び出した後、javaScriptはサーバーからの応答を受信するまで次の行に移動しません。

jQuery for Ajax呼び出しを使用している場合は、asynchプロパティをtrueにすると、サーバーの応答を待機しません。

于 2012-12-26T08:44:03.413 に答える