I am trying to use the jQuery.when
to fire two ajax
requests and then call some function after the two requests have completed. Here's my code:
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());
However this is not working as expected. Ajax call in method1
will return data which is to be used in showData()
and Ajax call in method2
will return count which is to be assigned to var count and later used in showData()
.
But when I fire the above code, method1
gets called and then method2
and then showData
leaving the data in showData
as 'undefined'
. How can I achieve this via $.when
which as far as I know proceeds only when both functions returning $.promise
are executed. I want that both the ajax calls should be called in parallel and later results be displayed based on results from both calls.
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);
Here's a working jsFiddle