所有这些函数都在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