我有这段代码
$('#mySelect').change(function() {
$.get(
"test.php",
function(data) { alert('test1'); }
);
});
我需要触发#mySelect的事件更改,并等待ajax的答案执行其他任务。但是当我尝试
时$.when($('#mySelect').change()).done(function() { alert('test2'); });
它只等待更改完成,并且ajax发送,未收到。 所以我在'test1'之前有警告'test2' 我怎样才能赚取$。等待甚至内部的所有内容完成?
答案 0 :(得分:3)
您必须先保存$.get()
返回的延迟对象,然后在$.when
中使用。
var getReq;
$('#mySelect').change(function() {
getReq = $.get(
"test.php",
function(data) { alert('test1'); }
);
});
$.when(getReq).done(function() { alert('test2'); });
答案 1 :(得分: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()
)。