多次ajax调用后执行函数

时间:2015-11-30 20:43:19

标签: javascript jquery ajax rest .when

我想在多个ajax调用完成时触发一个函数。 经过一些研究,我发现了jquery $ .when函数。 我测试了这个功能,但它不起作用。 有人知道如何解决这个问题吗?

var root = 'http://jsonplaceholder.typicode.com';

$(function(){
    restCall.ajaxcalls();
})

var restCall =
{
    ajaxcalls: function(){
        $.when(this.getAlbums(), this.getPhotos()).done(function(fetchedAlbums,fetchedPhotos){
            console.log(fetchedAlbums);
            console.log(fetchedPhotos);
        });
    },

    getAlbums:function() {
        $.ajax({
            type: 'GET',
            url: root + '/albums'
        }).done(function(response){
            return response;
        }).fail(this.ajaxFail);
    },

    getPhotos: function(){
        $.ajax({
            type: 'GET',
            url: root + '/photos'
        }).done(function(response){
            return response;
        }).fail(this.ajaxFail);
    },

     ajaxFail: function(xhr,message,error){
        console.log("het liep mis met de ajax call",xhr,message,error);
    }
};

控制台日志返回undefined,但我想要通过ajax调用获取的对象。

有人看到它出错了吗?

1 个答案:

答案 0 :(得分:1)

你永远不应该尝试在.done()处理程序中返回一个值,因为它是一个异步调用。相反,返回您的ajax调用返回的承诺,并在结果上使用$.when(),如下所示:

getAlbums: function() {
    return $.ajax({
        type: 'GET',
        url: root + '/albums'
    }).fail(this.ajaxFail);
},
getPhotos: function(){
    return $.ajax({
        type: 'GET',
        url: root + '/photos'
    }).fail(this.ajaxFail);
}