2011-12-10 73 views
1

我有這樣的代碼

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

我需要火#mySelect的情況變化,並等待AJAX​​的答案來執行其他任務。但是,當我嘗試

$.when($('#mySelect').change()).done(function() { alert('test2'); }); 

它只等待變化完成,並且ajax發出,沒有收到。 所以我在'test1'之前有'test2'的警報 我該如何讓$。等到內部的一切都完成了?

+0

AJAX異步發生,所以它不會阻塞(即它不會減慢瀏覽器)。 – Blender

+1

順便說一句,你有一個語法錯誤(第4行結尾的逗號) –

+0

對不起,語法錯誤,我只是重寫它的問題,我不在工作,文件在那裏......但我知道如果我沒有找到答案,我將無法入睡 – Etienne

回答

2

你相當接近,你只需要在change事件匿名功能可按返回延期對象:

$('#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'); });