我正在尝试使用jQuery.when触发两个ajax请求,然后在两个请求完成后调用一些函数。这是我的代码:
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());
但是,这没有按预期方式工作。Ajax调用method1将返回要在其中使用的数据,showData()而Ajax调用method2将返回要分配给var count并随后在中使用的count showData()。
method1
showData()
method2
但是,当我启动上面的代码时,先method1被调用,然后method2再将showData数据保留showData为as 'undefined'。我如何才能做到这$.when一点,据我所知,只有当两个返回$.promise的函数都执行时,才能进行。我希望两个ajax调用都应该并行调用,然后根据两个调用的结果显示以后的结果。
showData
'undefined'
$.when
$.promise
function showData(data1, data2) { alert(data1[0].max_id); alert(data2[0].max_id); } function method1() { return $.ajax("http://search.twitter.com/search.json", { data: { q: 'ashishnjain' }, dataType: 'jsonp' }); } function method2() { return $.ajax("http://search.twitter.com/search.json", { data: { q: 'ashishnjain' }, dataType: 'jsonp' }); } $.when(method1(), method2()).then(showData);
这是一个工作的jsFiddle