1

我有这样的事情:

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);
4

2 回答 2

5

$.when当您等待多个承诺时最有用。在您的情况下,您似乎不需要它。

jqXHR在这里,您只需从函数中返回对象:

fun1: function (foo){
    // ...
    return jqXHR;
}

fun2: function() {
    fun1().then(function() {
        // ...
    });
}

返回的对象$.get实现了promise接口,所以你可以直接给它附加回调。该文档还提供了几个示例:http ://api.jquery.com/jQuery.get/ 。

于 2013-06-07T14:12:31.767 回答
3

您需要promise()fun1().

否则,您将无法知道何时完成。

一旦你这样做了,你就不需要 acl $.when();相反,您可以简单地调用fun1().then(...)

于 2013-06-07T14:13:23.283 回答