2012-03-31 31 views
2

私はAJAXを実行してURLデータを取得し、データからオブジェクトを作成し、それをグローバルオブジェクト変数に割り当てる必要があります。だから私は同期 ajax要求を実行する必要があることを知っています。 (右?)まあ、私はまたbeforeSend設定を利用してユーザーに読み込み画面を提供したいと思っています。 (私はおそらく、最初に尋ねるべきです、それを達成するための唯一の方法を送っていますか?)どうすれば、同期と非同期の利点を組み合わせることができますか?同期と非同期AJAXを同時に実行する

非同期:

$.ajax({ 
     url:'scripts/scripts.php?call=page&url='+thisurl, /*local*/ 
     dataType:'html', 
     beforeSend:function(){ 
      $('#display').html('<div class="loading"></div>'); 
     }, 
     success:function(data, textStatus, jqXHR){ 
      /*local*/ myobj = getMyObj(data); $('#display').html(myobj); 
     }, 
     error:function(jqXHR, textStatus, errorThrown){ } 
}); 

同期:これは意味

+0

HTML5が変種の場合、[ウェブワーカー](https://developer.mozilla.org/En/Using_web_workers)を使用するのはどうですか? – Bakudan

+0

うわー、彼らはそれらを持っていますか?...私はそれがあればそれがクールだと思った。プログラマーはすべてを考えました。私はそれを研究します。今はHTML5だけですか? – philtune

+0

はい、IEはバージョン10に制限されています。しかし、他のブラウザは最新のバージョンではOKです。あなたは、それを使用し、通常のjQueryソリューションでフォールバックを追加することで、将来の準備をすることができます。 – Bakudan

答えて

2

EHMは、まあ、それはあなたがあなたが同期のAjax機能の前に何かを表示したい場合はことはかなり明白です使用ではなく、約束、またはのような何か:

var Ajax = $.ajax({ 
       url:'scripts/scripts.php?call=page&url='+thisurl, 
       dataType:'html' 
      }); 

//do something later 
$("#mybutton").on('click', function() { 
    Ajax.done(function(data) {   //if/when the ajax function is completed 
     $('#display').html(data); 
    }); 
});   

それとも別々の機能でAJAXを固執していることを同じように実行し、Ajax呼び出しの同期以外にも多くのオプションがあります!

+0

さて、私は以前にそのようなものを見たことはありませんでした。私は、ページ変数をグローバル変数に保存し、そのページのデータがない場合にのみajaxを実行したいと思っています。 Gmailから新しいスレッドを実行することなく、すでに見たメッセージを表示する方法を知った。私は、グローバル変数にデータを保存するだけで、既に見ていればそれを呼び出すと仮定します。 – philtune

+0

どこにドキュメントがあるのでしょうか(.done、.fail、.always)? .ajax()の文書で参照することしかできません。 – philtune

+0

gmailは、Google独自のウェブソケットのような実装であるSPDY(スピーディー)を使用します。 done()、fail()、およびalways()は$ .ajaxの新しいバージョンのjQueryで動作し、$。postは$ .ajax関数のショートカットです。 – adeneo

0

チャンスはあなたが本当に同期AJAX要求を行うにはしたくないされていることを確認していない場合

$.ajax({ 
     url:'scripts/scripts.php?call=page&url='+thisurl, /*local*/ 
     dataType:'html', 
     async:false, 
     success:function(data, textStatus, jqXHR){ 
      /*global*/ myobj = getMyObj(data); 
     } 
}); 
$('#display').html(myobj); 

申し訳ありません。同期要求が一時的に要求がより良い練習が非同期要求を行うとするスピナーを設置することである

アクティブである間に何らかのアクションを無効にするには、ブラウザをロックすることが

注:jQuery.ajaxドキュメントからユーザーにあなたがそれらのデータを取得していることを知らせます。 、同期のAjax機能を使用する理由一方

$('#display').html('<div class="loading"></div>'); 
$.ajax({ 
     url:'scripts/scripts.php?call=page&url='+thisurl, /*local*/ 
     dataType:'html', 
     async:false, 
     success:function(data, textStatus, jqXHR){ 
      /*global*/ myobj = getMyObj(data); 
     } 
}); 
$('#display').html(myobj); 

、それは本当に悪い考えです:

関連する問題