JQuery Подождите, пока вызовы async ajax не будут завершены
Привет. У меня есть 2 вызова ajax в моем script, мне нужно, чтобы они запускали asnyc для свободного времени, но мне нужно, чтобы второй дождался завершения первого.
$.ajax({
type: "POST",
url: "getText.asmx/ws_getText",
data: parO1,
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (msg) {
alert(msg.d.data);
}
, error: function () {
chyba("chyba v požadavku", "df");
}
});
if (parO2.length > 0) {
$.ajax({
type: "POST",
url: "getText.asmx/ws_getText",
data: parO2,
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (msg) {
/*WAIT UNTIL THE FIRST CALL IS FINISHED AND THAN DO SOMETHING*/
}
, error: function () {
chyba("chyba v požadavku", "df");
}
});
Итак, какие-нибудь идеи? Благодаря
Ответы
Ответ 1
Если вы используете jQuery 1.5+, вы можете использовать jQuery.when()
, чтобы выполнить это. Что-то вроде (сокращенный ajax требует краткости, просто передайте объекты, как вы делаете выше)
$.when($.ajax("getText.asmx/ws_getText"),
$.ajax("getText.asmx/ws_getText")).done(function(a1, a2){
// a1 and a2 are arguments resolved for the
// first and second ajax requests, respectively
var jqXHR = a1[2]; // arguments are [ "success", statusText, jqXHR ]
});
Вы не знаете, в каком порядке они будут возвращаться, поэтому, если вы перематываете это вручную, вам нужно будет проверить состояние другого запроса и подождать, пока он не вернется.
Ответ 2
Вам нужно подключить второй вызов, который будет содержаться в обратном вызове вашего первого вызова ajax. Например:
success: function(msg)
{
alert(msg.d.data);
if(par02.length > 0)
{
// Your 2nd ajax call
}
},
Так как JavaScript не работает в нескольких потоках на клиенте, вы не можете блокировать поток до тех пор, пока не будут выполнены определенные условия.
Ответ 3
Использование jquery
$.ajax({
type: "POST",
async:false, // ** CHANGED **
url: "getText.asmx/ws_getText",
data: parO1,
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (msg) {
alert(msg.d.data);
}
, error: function () {
chyba("chyba v požadavku", "df");
}
});
Ответ 4
Вот еще один ответ на выполнение двойных запросов ajax. Как и Tejs, пользователь делает вызов ajax в рамках метода успеха...
В плакате говорится, что вам лучше, если метод успеха запускает новый запрос ajax.. "
Имея два вызова $.ajax() в одном script