Deferred and Ajax
You'll need to wait for all requests to finish before alert
ing.
$.ajax({ url:'activeIDs', success : function(data){ // data = [14,15] var tableRows = []; var requests = []; for (var dataIndex=0; dataIndex < data.length; dataIndex++) { var isLast = dataIndex == data.length; var request = $.ajax({ url: 'info?id=' + data[dataIndex] }).done(function(data2) { // "foo", "bar" tableRows.push(data2.name); }); requests.push(request); } // wait for all requests to finish here $.when(requests).then(function(){ // all success functions have been called and updated things appropriately alert(tableRows.length); } }});
This assumes that all requests succeed. It also looks like there are a few typos
- Where does
tableRows
get updated? Where isentries
defined?
EditNow using promise style success handler. Should push the result in to tableRows
before calling the $.when().then
callback
Why do you want $.Deferred ? Your $.ajax calls are returning a promise, so, you can use it:
var promisesArray = [];for (var dataIndex=0; dataIndex < data.length; dataIndex++) { promisesArray.push($.ajax({...}));} $.when.apply($, promisesArray).then(...);
(inspired by this answer)
You can use deferreds by taking this solution and passing it to a deferred if you want, but it's not neccesary:
var x = $.Deferred(function(defer){ var promisesArray = []; for (var dataIndex=0; dataIndex < data.length; dataIndex++) { promisesArray.push($.ajax({...})); } $.when.apply($, promisesArray).done(function(data) { defer.resolve(data); });});return x.promise();
(Not tested, I'm sorry)