多个ajax回调

时间:2014-06-03 22:03:58

标签: javascript jquery ajax

我需要进行一些ajax调用,并且只有当它们全部完成时才会继续。我已经看过jQuery的$ when()。then()但我似乎无法让它工作。

$.when(
   getFriends()
).done(function( friends ){
    console.log( friends );
});

getFriends然后调用另一个方法来生成ajax请求并返回数据,这就是我认为问题所在。

getFriends: function()
{
   apiRequest( 'GET', 'friends', null,
        function( data ){
            return data;
        },

        function( error )
        {
            console.log( error );
        }
    );
}

apiRequest方法只获取所有数据,添加一些必要字段以便关闭服务器然后返回数据。这部分工作正常。这只是整个制作过getFriends让其他人知道它什么时候完成。

apiRequest: function( method, endpoint, data, success, error )
{
    var endpoint = config.api_base_url + endpoint;
    var ajax_options = {
        type: method,
        data: data,
        success: success,
        error: error
    };

    if( auth_token = getAuthToken() )
    {
        ajax_options.beforeSend = function( request )
        {
            request.setRequestHeader( 'X-Auth-Token', auth_token );
        };
    }

    $.ajax( endpoint, ajax_options );
}

非常感谢任何帮助或建议。感谢

2 个答案:

答案 0 :(得分:2)

您需要return承诺$.ajax()cannot return from the success handler。然后从getFriends返回一个承诺:

getFriends: function() {
    return apiRequest('GET', 'friends', null).fail(function(error) {
//  ^^^^^^
        console.log(error);
    }); // modified by the fail handler
},
apiRequest: function(method, endpoint, data) {
    var ajax_options = {
        url: config.api_base_url + endpoint,
        type: method,
        data: data
    };
    var auth_token = getAuthToken();
//  ^^^ missing var
    if (auth_token)
        ajax_options.beforeSend = function(request) {
            request.setRequestHeader('X-Auth-Token', auth_token);
        };

    return $.ajax(ajax_options);
//  ^^^^^^
}

答案 1 :(得分:1)

我不知道'承诺'你会对此感兴趣吗?MDN - Promises