所有這些函數都在jQuery異步AJAX成功事件之後調用的主函數中,並且它每秒運行一次。三個函數中的每一個函數都會調用它們中的特定函數。執行一個接一個的函數
這是基本的JavaScript代碼我有:
function mainFunction() {
function selectView(){
// do stuff
}
function startWidgets(){
// do stuff
}
function popData(){
// do stuff
}
$.when(selectView()).then(startWidgets).then(popData);
}
function ajaxCall(){
ajaxRequest = $.ajax({
type: "GET",
url: "",
data: {},
async: true,
cache: false,
timeout:50000,
success: function(data){
mainFunction();
setTimeout(
ajaxCall, 5000
);
},
error: function() {
// error stuff
},
complete: function() {
// complete stuff
}
});
}
selectView()
- 使用的jQuery .load()方法基於特定AJAX數據加載HTML結構。
startWidgets()
- 通過將小部件放入HTML結構(基於ID和類)來初始化小部件。只有第一次運行。
popData()
- 根據AJAX數據將數據填充到所有其他小部件。
我試圖$.when(selectView()).then(startWidgets).then(popData);
但沒有奏效。我的問題是startWidgets通常在selectView之前運行,但由於沒有HTML標記,它失敗了。我需要他們以特定的順序運行,並且一直到上一個完成纔開始。
我修改了代碼,並添加代碼來顯示我的AJAX請求是如何完成的,因爲它沒有在selectView函數中完成,因爲它具有它。那有意義嗎? – zen
@zen然後你有一個問題......你需要從'ajaxCall'返回ajaxRequest',並且該值必須從'selectView'返回....如果你可以共享這些方法,我們可以更好看 –
任何在不改變AJAX代碼的情況下按順序運行這3個函數的方法?如果有更好的解決方案,它不必使用'.when()'和'.then()'或'.done()'。 – zen