项目jsp页面中查询操作后台处理完毕后返回处理结果提示信息,然后前台页面
alert弹框显示结果信息,但是发现页面重新绘制与弹出框顺序不确定,有时候会出现点击弹框“确定”按钮后jsp页面才进行重绘。希望能在页面重绘完成后再弹出提示信息。
网上查找资料后发现:
javascript引擎是单线程的,为了避免dom操作,http请求等耗时较长阻塞线程,js提供事件循环功能,将一些异步操作或有io阻塞的操作都
放入一个事件队列,先顺序执行同步代码,然后按顺序执行事件队列中的异步事件:
这些事件包括:
setTimeout() 设置异步延迟,DOM操作,网络io如ajax请求事件用户操作事件,比如鼠标点击等
由于以上机制,导致alert函数会先于页面渲染事件执行。解决方法是将alert替换成其他弹层插件,或者将alert 函数放到setTimeout()函数中,让其和dom操作事件一样放入事件队列中执行:setTimeout(“alert(‘ok’)”,0)
但是按照以上方法依然无效,接着查找资料发现,浏览器页面渲染重绘操作不在js
引擎执行线程中,所以页面重绘与alert函数执行顺序不确定,因此只能将alert放入setTimeout中,并设置延迟以达到页面重绘先执行alert后执行的效果。
添加延迟时间100ms后问题解决。