我有一个onclick javascript函数(通过.jsp文件从DOJO组件调用),其中两个UI组件同时在js文件中加载(通过对Spring Controller的AJAX调用(java文件)并返回到JSP / Javascript文件。)
问题是第二个组件在第一个组件之前加载,并且没有显示规定的数据。我想知道如何在调用javascript中的代码之前设置延迟,以便以毫秒为单位延迟第二个组件。
注意:
我在我的控制器中使用了Thread.sleep(msecs),这似乎工作正常并解决了我的问题。但我不想用它知道它带来的风险。因此,请求替代方案。
我也使用了setTimeOut()函数,但setTimeOut()需要一个函数作为参数。我只需要在第一次将函数内的代码延迟几毫秒。从第二次起,我不想延迟被调用的代码。
请求您有价值的输入。
答案 0 :(得分:0)
JavaScript不允许阻塞线程,因此您可以使用的唯一选项是setTimeOut()函数。 或者,当第一个组件在加载时通知第二个组件时,您可以实现机制,此时第二个组件会自动重新加载。
答案 1 :(得分:0)
也许您的问题可以通过使用http://dojotoolkit.org/reference-guide/1.8/dojo/domReady.html?highlight=domready确保完全加载dom来解决
或使用dojo / deffered
http://dojotoolkit.org/reference-guide/1.8/dojo/Deferred.html?highlight=domready
问候
答案 2 :(得分:0)
延迟执行代码不是一个好主意。在开发过程中,可以按照您想要的顺序执行和返回调用。但是在系统处于负载状态的生产环境中,执行服务器调用的时间可能不一致。
我假设您使用dojo/xhr
进行ajax调用,而您的解决方案是使用DeferredList
。
http://dojotoolkit.org/reference-guide/1.9/dojo/DeferredList.html
var d1 = xhr(...);
d2 = xhr(...);
var dl = new DeferredList([d1, d2]);
dl.then(function(result){
// Execute the code that requires both calls to be completed.
});