Я видел .when()
и .then()
, которые использовались непосредственно с вызовами .ajax в jquery, чтобы задержать выполнение функции обратного вызова до тех пор, пока не будет выполнена ajax. У меня возникают проблемы с тем же, что и для функций, которые сами по себе не являются аякс-вызовами, но содержат функцию ajax. У меня есть следующий фрагмент коды:Как использовать .when() с функцией, содержащей вызов ajax?
$(function() {
$('.document').on('click', '.ajax', ajaxFunction);
});
function ajaxFunction(e) {
e.preventDefault();
// ajax request
$.ajax({
async: true,
cache: false,
type: 'post',
url: '/echo/html/',
data: {
html: '<p>This is echoed the response in HTML format</p>',
delay: 1
},
dataType: 'html',
beforeSend: function() {
console.log('Fired prior to the request');
},
success: function(data) {
console.log('Fired when the request is successfull');
$('.document').append(data);
},
complete: function() {
console.log('Fired when the request is complete');
}
});
console.log('hello world!');
}
function defferedFunction(d){
$.when(ajaxFunction(e)).then(alert('hi mom!'))
}
Моя цель состояла в том, чтобы стрелять предупреждение («привет мамы!»), Когда содержимое функции ajaxFunction
было полным, т.е. когда Аякс был сделан и «привет Мир!' зашел на консоль. Однако предупреждение никогда не появляется.
Проблема, насколько я могу судить, заключается в том, что функция контейнера фактически не возвращает обещание, и поэтому раздел .then()
никогда не срабатывает. Как я могу изменить этот код, чтобы вернуть обещание, когда весь внутренний код, включая ajax, закончен?
Я бы предпочел продолжить использование шаблона .when()
/.then()
вместо того, чтобы вручную включать обратный вызов в ajaxFunction
.
скрипку приведенного выше примера here.
Есть хороший способ задержки функции от возвращения обещание до любой другой код в функции не закончил? В этой скрипке, например: http://jsfiddle.net/mq4Sj/6/ – ckersch
Хотелось бы подождать, пока журнал «hello world» не вернет обещание. – ckersch
Нет, оба ajax и setTimeout являются асинхронными, они не блокируют выполнение –