1

ajax.phpページにsleep(5)を入れました。別の関数グループを開始するには、コードを返す必要があります。また、ajaxを使用しています。私の最初のajax呼び出しは次のようになります:

$.ajax({
  url: '/ajax.php',
  data: {
    id : code
  } ,           
  type: 'POST',
  async:false, //<<< here
  cache: false,
  beforeSend: function(){
      $('#loading').dialog();
  },
  success: function(data){                 
      console.log(data.result);           
      $('#loading').dialog('close'); 
      initAnotherFunctionGrop(data.result);
  },
  error: function(){
      $('#loading').dialog('close');
  }
});

IEとChromeで読み込み中のメッセージを表示できないのはなぜですか?Firefoxだけがそれを処理しています。

4

4 に答える 4

0

読み込んでいる画像がgif画像の場合、同期呼び出し中にこれらのブラウザがDOMコンポーネントへの変更を停止し、コードが実行されるとすべての変更が表示されるため、IEとChromeで表示するのは困難です。画像を読み込んだ直後にアラートボックスを配置することでテストできます。

$('#loading').dialog();
alert('loading image');

アラートがポップアップすると、ユーザーからの応答が返されるまで、アラートがスレッドの実行を停止するので、IEとChromeの両方で画像を読み込んでいることがわかります。

このリンクを読んでください: [https://stackoverflow.com/questions/11946828/loading-gif-image-is-not-showing-in-ie-and-chrome]

于 2012-09-04T04:37:37.777 に答える
0

非同期コードが最適です。同期コードはブラウザーをハングアップさせる可能性があります。これは、ajax リクエストの速度がユーザーのコンピューターとブラウザー以外の要因に依存する ajax の場合には、悪い考えです。ユーザーのマシンをハングさせたくないので、それを避けてください。代わりに、このようなことを試してください。

 function a(passedData){
      return $.ajax({ 
          url : '/ajax.php',
          data : passedData
      });
 }

 function b(passedData){
      return $.ajax({ 
          url : '/ajaxB.php',
          data : passedData
      });
 }

 $.when(a(data),b(data)).then(function(successDataForA,successDataForB){
     //Do code after all asynchronous ajax calls are done.
     //As a whole this is still asynchronous so other things can still run
 },function(failA,failB){
     //This fail callback is not necessary but here it is if needed
 });
于 2012-09-04T03:49:31.133 に答える
0

これを使って

    $(document).ready(function () {

        $('#ajaxloading').hide()  // hide it initially
             .ajaxStart(function () {
                 $(this).show();
             })
             .ajaxStop(function () {
                 $(this).hide();
             });
    });

ここで「ajaxloading」は、表示または非表示にする DIV の ID です。U は、この div 内に任意のコンテンツを配置できます

于 2012-09-04T04:02:22.827 に答える
0

過去に、同じコードがFFで機能した場合でも、非同期呼び出し(これを使用することをお勧めします)を使用している場合でも、Ajax呼び出し中にIEに「読み込み中...」メッセージを表示させるのに問題がありました.

IEでうまくいった(そしてFFで害を及ぼさなかった)回避策は、次のようなことです:

$('#loading').dialog();
setTimeout(function() {
    $.ajax(...);
},1);

つまり、「読み込み中」メッセージを表示してから、を使用して Ajax 呼び出しを延期します。setTimeout()これにより、現在の JS が終了した後、タイムアウトが発生する前に、ブラウザがページを再描画する時間が与えられます。

ただし、もちろん、同期リクエストを実行している場合は、メソッドの後にその結果を使用して実行する追加のコードがあると思われる$.ajax()ため、そのすべてを渡す関数に移動するsetTimeout()(またはそこから呼び出す) 必要があります。 、 とりあえず)。

于 2012-09-04T05:31:12.170 に答える