【发布时间】:2016-01-20 08:41:25
【问题描述】:
我需要延迟每个 Ajax 调用,直到前一个函数 (hashcode.Sign()) 完成。不幸的是,我的代码不会等到hashcode.Sign() 完成,这会搞砸一切,因为该函数会创建一个新会话,并且它不能被覆盖以使事情正常工作。我该怎么做?我是 Deferred 对象的新手,所以请原谅我缺乏知识。
for (var l = 0; l < fileArray.length; l++) {
var d = new jQuery.Deferred();
d.resolve(openDdoc(fileArray[l].url, $pid, fileArray[l].id));
d.done(function() { console.log('done'); });
}
function openDdoc(url, pid, fid) {
var def = new jQuery.Deferred();
$.when(def).done(function() { console.log('Function completed!'); });
def.resolve($.ajax({
url: '/open-ddoc',
type: 'post',
async: false,
data: {doc: url, pid: pid, fid: fid},
}).done(function (data) {
hashcode.Sign();
}).fail(function(data) {
console.log('this shit failed');
}));
}
hashcode.Sign() 函数包括更多的 Ajax 调用和对其他函数的调用。如果需要,我可以稍后包含它。我知道我可以使用 setTimeout() 解决所有这些问题,但这不是我的首选。
【问题讨论】:
-
是的,请包括
hashcode.Sign()。以正确的方式编写很重要。
标签: javascript jquery ajax jquery-deferred