javascript - 多个ajax回调

标签 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 );
}

如有任何帮助或建议,我们将不胜感激。谢谢

最佳答案

您需要返回 $.ajax() 产生的 promise ,您cannot return from the success handler .然后从 getFriends 返回一个 promise :

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);
//  ^^^^^^
}

关于javascript - 多个ajax回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24025747/

相关文章:

javascript - 使用 Wea​​syprint 生成 pdf 文件,保存为 zip 文件,将该 zip 文件发送给客户端并提供下载

javascript - 使用 jQuery 在加载缓存脚本时处理 404

javascript - 如何在加载、后退和前进时运行函数

Jquery .live() 仍然无法正确运行函数

php - 查询结果为空

javascript - AngularJS - 最后使用 $timeout() 在 Controller 中执行函数

Javascript 比较对象中的值

javascript - 如何检测我在 eval() 调用中?

javascript - 如何使用 Jquery 或 Javascript 在 Laravel Blade 模板 div 中加载网页?

javascript - 如果文件输入更改,则刷新正文标记