我有这样的事情:
fun1: function (){
var jqXHR = $.get(
"http://url.com",
"search=toto",
function(){});
jqXHR.fail(function (jqXHR, textStatus, errorThrown){
//do something
});
jqXHR.done(function (data,textStatus,jqXHR){
//do something
});
}
fun2: function (){
fun1();
//do something AFTER my AJAX requests are finished
}
我想等待我的AJAX请求在继续之前完成。为实现这一点,我通常会在fun1()中使用回调函数。但我的代码现在包含几个级别的回调,它看起来很混乱。然后,我想使用$.when
方法,但我不知道如何做到这一点:因为fun1
不是延迟对象,我不能只写:
$.when(fun1()).then(//do something);
答案 0 :(得分:5)
$.when
非常有用。在你的情况下,你似乎不需要它。
在这里,你只需要从函数中返回jqXHR
对象:
fun1: function (foo){
// ...
return jqXHR;
}
fun2: function() {
fun1().then(function() {
// ...
});
}
$.get
返回的对象实现了promise接口,因此您可以直接将回调附加到它。该文档还提供了几个示例:http://api.jquery.com/jQuery.get/。
答案 1 :(得分:3)
您需要从promise()
返回Deferred对象(或者更好,fun1()
)。
否则,您无法知道何时完成。
一旦你这样做,你就不需要$.when()
;相反,您只需拨打fun1().then(...)