У меня есть функция JavaScript, которая выполняет два последовательных запроса Ajax с помощью jQuery. Я хочу удостовериться, что первый запрос загрузился, прежде чем вторая функция вызвана. Существует ли способ, которым я могу сделать это?
Либо укажите асинхронизацию: false
в опциях $.ajax
, либо выполните второй вызов аякса в опции полного вызова
первого вызова.
Используя jQuery, самый простой способ - это:
$.ajax({
type: "POST",
url: "some.php",
success: function(msg){
$.ajax({
type: "POST",
url: "some2.php",
success: function(msg){
alert( "End of second call" );
}
});
}
});
$.post("script1.php", {data:"val"}, function(response) {
$.post("script2.php", {data:response}, function(results) {
// this second call will be initialized when the first finishes
});
});
В своем обратном вызове для первой функции сделайте второй вызов.
Для наилучшего результата, вероятно, следует вызвать вторую функцию в обратном вызове первой.
Например:
$.post("http://www.somewebsite.com/page.php", function(data) {
// whatever
function2();
});
Пример реализации:
function callback() {$('div#second_ajax_output').load('http://www.google.com');}
$('div#first_ajax_output').load('http://www.yahoo.com',callback);
Простой способ - это запустить второй запрос, когда первый вернется (в полном обратном вызове).
Если вам нужен более сложный подход, посмотрите на плагин AjaxQueue. Вы можете ставить запросы в очередь таким образом.
Правка: Неправильно прочитал вопрос; виноват. Если вы когда-нибудь захотите, чтобы два AJAX-запроса выполнялись одновременно, но запускали обратный вызов только после того, как оба закончились, вот как вы это делаете!
Попробуйте следующее:
var completedCount = 0;
var callback = function()
{
completedCount++;
if (completedCount == 2)
{
// Do something.
}
};
$.post('url-1', {}, callback);
$.post('url-2', {}, callback);