I’m having some problems with the ajax async. I have an array then loop through the array to make an ajax call, if success the ajax will return an xml string, i’ll use it to fill in an table and update process bar. I use async:false
it works fine on Firefox, but it’s not work properly on Chrome. I also tried to use $.ajax().done()
, but it’s not affect at all.
Is there anyway to get the responsed xml string when ajax call finish then the next loop will run?
for (var i = 0; i <= arr.length; i++){
$.ajax({
url: '',
data: '',
async: false
}).done(function(xml) {
//get xml string to handle and put it into some table as contents
});
//Then go to next loop
}
3
Answers
Finally, i got my own solution that i use the async/await to make sense.
Don’t try to make asynchronous code synchronous. You will lock up the event loop and get a nasty performance penalty.
Make the requests in parallel. Collect the promises in an array. Use
Promise.all
to determine when they have all completed.Then you can extract the data from them and do what you will with it.
For example:
If you have to update data in each iteration, you can use some string and update in in .done().
Try it with recursion like this: