【发布时间】:2014-07-01 13:22:11
【问题描述】:
我有一个带有 html 内容的 jsp 文件和一个脚本,我也在使用 dhtmlx。我的 Web 应用程序的其他部分正在运行,因此,我只想专注于这个问题,因为环境运行良好。在我得到的文件的一个点中:
numTabs = getNumTabs();
for (var i=0; i<numTabs;i++) {
var mytab = "tab_"+i;
tabbar.addTab(mytab,'Tab Numer: ' + i,'');
//alert("for " + i); PLACE 1
initTabContent(mytab);
}
function initTabContent(tabID){
//alert("initTabContent " + i); PLACE 2
tab = tabbar.cells(tabID);
toolbar = tab.attachToolbar();
toolbar.loadXML('.../...file.xml',function(){
//alert(i); PLACE 3
toolbar.setItemText('botton1', 'Botton 1');
});
grid = tab.attachGrid();
//more stuff
}
重点是:
如果我取消注释 PLACE 1 中的警报,一切都会很顺利,它会加载 XML 并且一切正常,但如果我评论警报,它不会顺利。
如果我取消注释警报 1 和警报 2,我会在网页中看到:
- 我看到:“为 0”-> 好的
- 我看到:“for 1”几乎立即变为“initTabContent 0” -> 好的,但我可以看到它
- 我看到:“for 1” -> 好的
- 我看到:“for 2”几乎立即更改为“initTabContent 1”-> OK
- 我看到:“for 2”-> 好的
- 我看到:“for 3”几乎立即变为“initTabContent 2”-> OK ....然后
所以,我知道尽管使用了 myfunction,循环仍在继续,并且不会等待该函数的完全终止。 有趣的是,如果我评论警报 1 和 2,然后取消评论警报 3,我在网页上看到的第一件事就是 4,然后是 3、2、1、0...
如果我再次离开,只有警报 1 未注释,一切正常。我想的原因是警报使系统等待用户,因此 XML 加载良好。
我的问题: 第一:为什么循环不等待函数完成?应该是顺序的吧? 第二:没有警报如何解决?我还尝试在里面放一个空的 for 循环以腾出时间,但没有成功……(这不是一个好方法)
非常感谢, 亚历克斯。
【问题讨论】:
-
它不是顺序的 - 它是异步的。
loadXML方法发出 AJAX 请求(我猜),并在完成时执行提供的函数(无论何时)。 -
您忘记了一些需要它们的特定变量上的
var。 -
如我之前所说,缺少的变量是全局的,这只是一个片段。
-
他们失踪的事实是整个问题。
toolbar = tab.attachToolbar();将在加载 xml 之前被覆盖。 -
@KevinB 你是完全正确的。那个 var 不见了。我没有检查的原因是因为它与循环内的警报一起工作,那怎么可能呢?如果没有定义 var,它如何通过警报停止循环?
标签: javascript html jsp web-applications dhtmlx