关于jQuery延迟对象的Pluralsight教程有这个例子,我已经添加了一些console.log
。它将三个 html 文件异步加载到三个div 中,并在成功后打印到屏幕"工作!--但是,console.log
在处理实际完成之前将"成功!"打印到控制台。如果我将console.log
放在代码的when
部分中,则同样的事情 - 它会打印内容在实际加载到屏幕上之前完成加载。
那么,为什么 DOM 上的处理按预期(成功时)发生,但console.log
消息的打印时间早于成功?
var loadSection = function (options) {
if (typeof options !== 'object')
options = {
};
options.selector = options.selector || '';
options.url = options.url || '';
return $.get(options.url, function (result) {
$(options.selector).html(result);
console.log(options.url)
}, 'html')
}
$('#Load').on('click', function () {
$.when(loadSection({
url: 'Content1.html',
selector: '#Section1'
}), loadSection({
url: 'Content2.html',
selector: '#Section2'
}), loadSection({
url: 'Content3.html',
selector: '#Section3'
})
).promise()
.done(function (result) {
$('#Messages').append('Worked!<br/>')
console.log('success!');
});
});
在loadSection
函数中,更改
return $.get(options.url, function (result) {
$(options.selector).html(result);
console.log(options.url);
}, 'html')
自
return $.get(options.url, 'html')
.then(function (result) {
console.log(options.url);
return $(options.selector).html(result).promise();
});
这应该返回一个承诺,该承诺在.html(result)
完成时解析,而不是在$.get
完成时解析