2013-07-29 83 views
0

我有一个onclick javascript函数(通过.jsp文件从DOJO组件中调用),其中两个UI组件在js文件中同时加载(通过AJAX调用Spring控制器(java文件)并返回到JSP/Javascript文件。)在JavaScript/Java中的函数中执行延迟代码

问题是第二个组件在第一个组件之前加载并且没有显示规定的数据。我想知道如何在JavaScript中调用代码之前设置延迟,以毫秒为单位延迟第二个组件。

注:

  1. 我曾经在我的控制器的Thread.sleep(毫秒),这似乎很好地工作并解决我的问题。但我不想用它知道它带来的风险。所以请求一个替代方案而不是这个。

  2. 另外我用setTimeOut()函数,但setTimeOut()需要一个函数作为参数。我只需要在第一次延迟几毫秒的函数内的代码。从第二次起,我不想延迟被调用的代码。

请求你宝贵的意见。

+0

你可以使用链AJAX回调控件的加载?如果没有,你可以看看dojo的[promise and defereds](https://dojotoolkit.org/documentation/tutorials/1.9/promises/)让你的控件链自己 –

回答

0

JavaScript不允许阻塞线程,所以您可以使用的唯一选项是setTimeOut()函数。 或者当第一个组件在加载时通​​知第二个组件并且此时第二个组件重新加载时,您可以实现机制。

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. 
});