7

だから私はこれを持っています:

$('.something').click(function(){
          $('body').html('');

          $.ajax({
            url: 'someurl',
            dataType: 'json',
            async: false,
            success: function(data){
              //do stuff
              alert('yo');
            }
          });

          return false;   
});

Firefox では、'yo' アラートの前に本文が正しく空白になります...しかし、Chrome では、$('body').html(' ') 呼び出しは ajax の前に実行されます....これは、非同期設定が false に設定されているためです...true の場合、chrome でも適切に動作します

async フラグを false に設定したまま、Chrome で適切に ajax を呼び出す前に $('body').html() 呼び出しを呼び出す方法はありますか?

また、タイムアウトを設定する必要がないことが望ましいでしょう

4

2 に答える 2

6

そのコードでAJAXを呼び出す前に、ページが空白になるのを見たことはありますか?これはどのブラウザでも発生しないはずです。

スクリプトの実行中はブラウザウィンドウがまったく更新されないため、同期呼び出しによってすべての更新がブロックされます。

AJAX呼び出しの前にブラウザーを更新するには、を使用しますsetTimeout。これにより、要求が送信される前にブラウザーにコントロールが返されます。

$('.something').click(function(){
  $('body').html('');

  window.setTimeout(function() {

    $.ajax({
      url: 'someurl',
      dataType: 'json',
      async: false,
      success: function(data){
        //do stuff
        alert('yo');
      }
    });

  }, 0);

  return false;   
});

注:これはもちろん、同期呼び出しの意図である場合、関数の戻り値で要求の結果を使用できないことを意味します。イベントハンドラーを同期させる必要がある場合、AJAXリクエストの前にブラウザーを更新することはできません。

于 2012-09-11T17:57:23.080 に答える