2011-12-10 12 views
1

を待っていない私は、このコード

$('#mySelect').change(function() { 
    $.get(
    "test.php", 
    function(data) { alert('test1'); } 
); 
}); 

私は#mySelectのイベント変更を発射し、他のタスクを実行するために、AJAXの答えを待つ必要があります。でも試してみると

変更を待つだけで、オークションは終了し、受信していません。 私は 'test1'の前に警告 'test2'を持っています 偶数の中のすべてが終了するのを待つ$を作るにはどうしたらいいですか?

+0

AJAXは非同期的に発生するため、ブロックされていません(ブラウザが遅くなることはありません)。 – Blender

+1

Btw構文エラーがあります(4行目の末尾にカンマ) –

+0

構文エラーは申し訳ありませんが、私は問題のために書き直しています。私は仕事中ではありません。ファイルはそこにあります...しかし私は知っています – Etienne

答えて

2

あなたは非常に近いです、あなただけのchangeイベント匿名funciton繰延オブジェクトを返す必要があります。

$('#mySelect').change(function() { 
    return $.get( 
     "test.php", 
     function(data) { alert('test1'); }//I removed the trailing comma here, it will cause problems 
    ); 
}); 
$.when($('#mySelect').change()).done(function() { alert('test2'); }); 

これは$.get() AJAX呼び出しに関連した繰延オブジェクトを返します。こうすれば、$.when()はAJAX呼び出しが完了するのを待ってから、.done()で関数を実行します(.then()も使用できます)。

+0

両方の答えが素晴らしいですが、私はグローバル変数の必要がないのであなたの答えを受け入れることにしました ありがとう – Etienne

3

$.get()によって返された遅延オブジェクトを保存し、$.whenで使用する必要があります。

var getReq; 

$('#mySelect').change(function() { 
    getReq = $.get(
    "test.php", 
    function(data) { alert('test1'); } 
); 
}); 

$.when(getReq).done(function() { alert('test2'); });