57

I am new to Ajax and I am attempting to use Ajax while using a for loop. After the Ajax call I am running a function that uses the variables created in the Ajax call. The function only executes two times. I think that the Ajax call may not have enough time to make the call before the loop starts over. Is there a way to confirm the Ajax call before running the function printWithAjax()? I do not want the printWithAjax() function to execute until the Ajax call is complete. Any help will be greatly appreciated.

var id; var vname; function ajaxCall(){ for(var q = 1; q<=10; q++){ $.ajax({ url: 'api.php', data: 'id1='+q+'', dataType: 'json', async:false, success: function(data) { id = data[0]; vname = data[1]; } }); printWithAjax(); }//end of the for statement }//end of ajax call function 
7
  • 2
    since you are using asycn:false(don't ever use it, if possible), the print will execute only after the ajax is completed.... Commented Apr 25, 2014 at 2:43
  • but the correct solution will be is to call the print function within the success callback and pass the id and vname as arguments Commented Apr 25, 2014 at 2:44
  • So you want printWithAjax to fire once for each ajax call? Commented Apr 25, 2014 at 2:44
  • 1
    like jsfiddle.net/arunpjohny/yA8Zu/2 - do you also want to make sure the ajax request is executed in sequence if not you can remove the async:false Commented Apr 25, 2014 at 2:45
  • 2
    Since your just passing numbers 1 - 10, why not pass an array or range (1-10) to your server and just make one ajax call? Rather then making 10 ajax requests. Also you can loop through the data to control its display. Commented Apr 25, 2014 at 2:51

6 Answers 6

79

Try this code:

var id; var vname; function ajaxCall(){ for(var q = 1; q<=10; q++){ $.ajax({ url: 'api.php', data: 'id1='+q+'', dataType: 'json', async:false, success: function(data) { id = data[0]; vname = data[1]; }, complete: function (data) { printWithAjax(); } }); }//end of the for statement }//end of ajax call function 

The "complete" function executes only after the "success" of ajax. So try to call the printWithAjax() on "complete". This should work for you.

Sign up to request clarification or add additional context in comments.

2 Comments

the complete callback executes irrespective of the success / failure of the ajax call
wrong! complete is called every time stackoverflow.com/a/42229704
46

You can use .ajaxStop() or .ajaxComplete()

.ajaxComplete() fires after completion of each AJAX request on your page.

$( document ).ajaxComplete(function() { yourFunction(); }); 

.ajaxStop() fires after completion of all AJAX requests on your page.

$( document ).ajaxStop(function() { yourFunction(); }); 

1 Comment

No, ajaxComplete is executed early and is practically useless.
18

Add .done() to your function

var id; var vname; function ajaxCall(){ for(var q = 1; q<=10; q++){ $.ajax({ url: 'api.php', data: 'id1='+q+'', dataType: 'json', async:false, success: function(data) { id = data[0]; vname = data[1]; } }).done(function(){ printWithAjax(); }); }//end of the for statement }//end of ajax call function 

3 Comments

done is the same as success. you want ".always()"
@MichelAyres I thought success will run only if it is successful and done would run no matter what...
1

Append .done() to your ajax request.

$.ajax({ url: "test.html", context: document.body }).done(function() { //use this alert("DONE!"); }); 

See the JQuery Doc for .done()

Comments

0

You should set async = false in head. Use post/get instead of ajax.

jQuery.ajaxSetup({ async: false });

 $.post({ url: 'api.php', data: 'id1=' + q + '', dataType: 'json', success: function (data) { id = data[0]; vname = data[1]; } }); 

Comments

0

try

var id; var vname; function ajaxCall(){ for(var q = 1; q<=10; q++){ $.ajax({ url: 'api.php', data: 'id1='+q+'', dataType: 'json', success: function(data) { id = data[0]; vname = data[1]; printWithAjax(); } }); }//end of the for statement }//end of ajax call function 

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.