我试图使用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',success: function(data) { count = data.d.__count; } }); }; $.when(method1(),method2()) .then(showData());
但是这不工作像预期。 Ajax在method1中调用将返回在showData()中使用的数据,而method2中的Ajax调用将返回计数,该值将被赋值给var count并在showData()中使用。
但是当我启动上面的代码,method1被调用,然后method2然后showData留下showData中的数据为’未定义’。我怎么可以通过$ .when实现这一点,据我所知,只有当两个函数返回$ .promise执行时才会得到。我想要两个ajax调用应该并行调用,以后的结果显示基于两个调用的结果。
解决方法
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",dataType: 'jsonp' }); } $.when(method1(),method2()).then(showData);
这是一个工作jsFiddle