3

私はjQuery$.ajax呼び出しを持っていますが、これはすべての主要なブラウザーで正常に機能します。

さらに、.ajaxStart関数と.ajaxStop関数を使用して、ページに「loading...」という非表示のdivを表示します。

問題は、ajaxStartと.ajaxStopの両方で、イベントは問題なく発生しますが(console.log()から確認します)、ajaxStartのjQueryの.showイベントはGoogleChromeでは完全に無視されます。

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

$("#loadMsg").ajaxStart(function(){
   console.log('ajaxstart');
   // the next command is ignored ONLY in Google Chrome
   $(this).show(0);
}); 

$.ajax({
  url:"xxx.php",
  type:"POST",
  data:"id="+id,
  async:false,
  success:function(data)
  {
     console.log(data); 
  }
});  

$("#loadMsg").ajaxStop(function(){
  console.log('ajaxfinish');
  $(this).hide(0);
});

私はすでに試しました:

$("#loadMsg").show(0);  
$("#loadMsg").fadeIn();  
$("#loadMsg").css("display","block");  
$("#loadMsg").css("display","inline");  

どんな提案でも本当にありがたいです。

4

2 に答える 2

0

async:falseでこれを行うことはできません。これにより、リクエストが完了するまでブラウザがハングします。async:falseを使用する代わりに、非同期で動作するようにプロジェクトを作り直すことを検討することをお勧めします。

于 2012-05-30T14:37:25.400 に答える
0

2日間苦労した後、私はついに解決策を見つけました。上で投稿したコード全体は関数内にあり、successプロパティを介してxxx.phpの結果をメインコードに返しました。

問題は、async:trueオプションを使用すると、ajaxがリクエストを完了するのを待たずに、関数がすぐに戻り値を返すことでした。したがって、戻り値は常に「未定義」の値であり、xxx.phpの適切な結果ではありませんでした。

ajaxを非同期で実行し、ajaxリクエストが完了したときにのみ残りのコードを続行する解決策は、コード全体を成功パラメーター内に配置することです。

次の例で明確にしようと思います。

動作しなかったコード:

function foo()
{

 if call_ajax_request()=="true"
  {
    //execute code A
    // never had the chance to be executed because call_ajax_request() 
    // was always undefined
  }

}



function call_ajax_request()
{

  var return_value;

  $.ajax({
  url:"xxx.php",
  type:"POST",
  data:"z="+y,
  success:function(data)
    {
           return_value = data;
        }
    }); 

    //return_value was always "undefined" because the flow didn't wait
   // for ajax to complete (async mode)
   return return_value;
}

最終的に仕事をしたコード:

function foo()
{

  $.ajax({
   url:"xxx.php",
   type:"POST",
   data:"z="+y,
   success:function(data)
     {
            return_value = data;

            //here, the following code won't be executed 
            //as long as ajax hasn't been completed.

            if (return_value=="true")
            {
               //execute code A
            }
         }
   }); 

}
于 2012-06-01T21:34:17.260 に答える