2011-12-10 47 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'); });