我已经看到.when()
并.then()
直接在 jquery 中使用 .ajax 调用来延迟回调函数的执行,直到 ajax 完成。我遇到的问题是对本身不是 ajax 调用但包含 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
函数的内容完成时触发警报(“嗨,妈妈!”),即当 ajax 完成和“hello world!”时 已经登录到控制台。但是,警报永远不会出现。
据我所知,问题在于容器函数实际上并没有返回一个承诺,因此该.then()
部分永远不会触发。当所有内部代码(包括 ajax)完成后,如何修改此代码以返回承诺?
我宁愿继续使用.when()
/.then()
模式,而不是手动在ajaxFunction
.
上面的例子的一个小提琴是here。