Выполнить функцию после завершения вызова Ajax
Я новичок в Ajax, и я пытаюсь использовать Ajax при использовании цикла for. После вызова Ajax я запускаю функцию, которая использует переменные, созданные в вызове Ajax. Функция выполняет только два раза. Я думаю, что вызов Ajax может не иметь достаточно времени, чтобы выполнить вызов до начала цикла. Есть ли способ подтвердить вызов Ajax перед запуском функции printWithAjax()? Я не хочу, чтобы функция printWithAjax() выполнялась до тех пор, пока вызов Ajax не будет завершен. Любая помощь будет принята с благодарностью.
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
Ответы
Ответ 1
Попробуйте этот код:
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
"Полная" функция выполняется только после "успеха" ajax. Поэтому попробуйте вызвать printWithAjax() на "complete". Это должно сработать для вас.
Ответ 2
Вы можете использовать .ajaxStop()
или .ajaxComplete()
.ajaxComplete()
запускается после завершения каждого запроса AJAX на вашей странице.
$( document ).ajaxComplete(function() {
yourFunction();
});
.ajaxStop()
запускается после завершения всех запросов AJAX на вашей странице.
$( document ).ajaxStop(function() {
yourFunction();
});
Ответ 3
Добавить .done() в вашу функцию
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
Ответ 4
Вы должны установить async = false в голове.
Используйте post/get вместо ajax.
jQuery.ajaxSetup({ async: false
});
$.post({
url: 'api.php',
data: 'id1=' + q + '',
dataType: 'json',
success: function (data) {
id = data[0];
vname = data[1];
}
});
Ответ 5
попробовать
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
Ответ 6
Добавить .done()
в ваш запрос ajax.
$.ajax({
url: "test.html",
context: document.body
}).done(function() { //use this
alert("DONE!");
});
См. JQuery Doc для .done()