我试图使用jQuery.when
来触发两个ajax
请求,然后在这两个请求都完成后调用一些函数。以下是我的代码:
var count = 0;
var dfr;
var showData = function(data) {
dfr.resolve();
alert(count);
// Do something with my data data received
};
var method1 = function() {
dfr = $.Deferred();
return $.ajax('localhost/MyDataService/DataMethod_ReturnsData', {
dataType: "jsonp",
jsonp: "$callback",
success: showData
});
};
var method2 = function() {
return $.ajax('localhost/MyDataService/DataMethod_ReturnsCount', {
dataType: "jsonp",
jsonp: "$callback",
success: function(data) {
count = data.d.__count;
}
});
};
$.when(method1(), method2())
.then(showData());
但是,这并没有按预期工作。在method1
中的Ajax调用将返回要在showData()
中使用的数据,而在method2
中的Ajax调用将返回要分配给变量计数的计数,并稍后在showData()
中使用。但是当我执行上面的代码时,method1
被调用,然后是method2
,然后是showData
,使得showData
中的数据为'undefined'
。我如何通过$.when
实现这一点,只有在返回$.promise
的两个函数都执行时才会进行,据我所知。我希望两个ajax调用应该并行调用,稍后根据两个调用的结果显示结果。
dfr = $.Deferred()
,因为$.ajax()
返回的jqXhr
已经是一个 deferred。不确定这是否会解决问题,但这绝对是不必要的。问题可能是你使用了.then()
而不是.done()
。 - Matt Ball