У меня есть ряд js-функций, которые выполняют вызовы базы данных с помощью ajax, и мне нужно, чтобы они заканчивали и обновляли переменные перед переходом к конечной функции. Я пытаюсь использовать jquery $ .when и мне не повезло ... в прикрепленном jsfiddle вы можете увидеть, что окончательный результат функции отображается до обновления двух основных функций.Использование отложенных с AJAX
var x1 = '%';
var x2 = '%';
main();
function main(){
logProgress('start');
$.when(a(), b()).done(logProgress(x1 + x2));
}
// called by main()
function a() {
return $.ajax("/echo/html").pipe(function(data){
function changex1() {
x1 = 'x1Changed';
};
setTimeout(changex1(),2000);
logProgress(x1);
});
}
// called by a()
function b() {
return $.ajax("/echo/html").pipe(function(data){
function changex2() {
x2 = 'x2Changed';
};
setTimeout(changex2(),5000);
logProgress(x2);
});
}
function logProgress(message){
$('#progress').append('<li>'+message+'</li>');
}
Любая помощь будет высоко оценена !!
[Этот вопрос может иметь ответ, который вы ищете] (http://stackoverflow.com/questions/28575501/jquery-when -done-not-working) - ваши функции 'a' и' b' не возвращают обещаний, а именно: 'jquery.when' работает – chazsolo
@chazsolo' $ .Deferred(). pipe() 'возвращает обещание,' $ .ajax() 'возвращает отложенный, и оба' a' и 'b' возвращают' $ .ajax(). pipe() ', поэтому да, его функции ** ** возвращают обещание –
@MarcoScabbiolo you ' Верно, я пропустил «трубку». Должно было быть более тщательное прочтение вопроса. – chazsolo