使用带有$ .when()。完成的ajax承诺

时间:2014-11-18 07:26:23

标签: javascript jquery ajax

我需要两个不同的ajax调用的两个返回值。

我有两个javascript函数:

this.getVal1= function(numberDep){
    var promise = $.ajax({
        url:url, //REST url
        type:"GET",
        dataType:"json",
        contentType: "application/json"
    });
    return promise;
};

this.getVal2= function(){
    var promise = $.ajax({
        url:url, //another REST url
        type:"GET",
        dataType:"json",
        contentType: "application/json"
    });
    return promise;
};

我如何称呼这两个功能:

 $.when(getVal1(17),getVal2())
 .done(function(_topdep,_alldep){
       console.log(_topdep);
       console.log(_alldep);

 });

以下是每个console.log的结果:http://i.stack.imgur.com/IHBQx.png

我应该从第一个console.log返回的是那17个记录,第二个console.log是36个记录(请查看上图)。

非常感谢任何帮助,谢谢..

2 个答案:

答案 0 :(得分:3)

由于这些是ajax promise并且ajax promise具有多于1个回调参数(data,status,jqXHR),then回调将接收一个数组作为每个回调的值。因此,要获取获取每个参数的第一个成员所需的数据

$.when(getVal1(17), getVal2())
.done(function (_topdep, _alldep) {
    console.log( _topdep[0] );
    console.log( _alldep[0] );

});

演示:Fiddle

答案 1 :(得分:-2)

我猜你想要在完成两个单独的ajax调用之后返回结果吗?如果是这种情况,那么您可以在Promise中包装每个ajax请求并使用Promise.all([promise1, promise2])构造。