在完成其中一個函數之前,我必須使用AJAX請求調用3個函數。所有函數都需要相同的數據,所以我只想啓動一次AJAX請求。我認爲我需要一個功能來調用3個函數中的2個來等待並提供數據。也許問題是我是新來的jQuery延遲,並沒有找到一些基本的東西?感謝幫助!jQuery deferrend;等待函數的回調
因爲我的劇本是複雜的例子,所以我創造了這個演示:(我希望它是自我解釋)
<script>
var requestRunning = false;
//do some ajax request etc...
function doSomething() {
return {
doIt: function (test, startDelay) {
var dfd = $.Deferred();
setTimeout(function() {
if (requestRunning == false) {
console.log("starting ajax call:", test);
requestRunning = true;
//Fake ajax call
setTimeout(function() {
dfd.resolve(test);
// Todo: A done; provide data to waiting B and C.
}, 500);
}
else {
console.log("ajax call allready running, waiting...", test);
}
}, startDelay);
return dfd.promise();
}
}
}
// Fake delay for function calls in really short time
var master = doSomething();
var a = master.doIt("a", 10);
var b = master.doIt("b", 15);
var c = master.doIt("c", 12);
// Do some stuff with the received data...
a.done(function myfunction(result) {
console.log(result + " done");
});
b.done(function myfunction(result) {
console.log(result + " done");
});
c.done(function myfunction(result) {
console.log(result + " done");
});
</script>
這似乎是你想序列a,b和c,但它不是100%清楚該序列應該是什麼。例如,你可以有'a然後b然後c'或'a then(b和c並行)'或'(a和b並行)然後c'或者'(a,b和c並行)然後something_else '。任何這些都是可能的。 – 2015-01-16 06:41:35
A,B和C沒有定義的順序。有時只有A需要數據;其他時間都需要這些數據。但是如果多於一個功能需要這些數據,我只想開始1個Ajax調用(A/B/C的結果數據是相同的) – Chris 2015-01-16 08:48:28
對不起,我不明白。 – 2015-01-16 17:25:52