jsp页面发送ajax请求遮罩层显示失败,或者请求完才显示
2016-11-30 19:01
375 查看
业务场景:
用户上传文件,点击上传,提示正在上传,请稍等,并且显示遮罩层,遮罩住整个页面,这里上传用得是异步上传。
问题:
当点击上传,没有触发遮罩层效果,而是在ajax执行完毕后才显示遮罩层。
原因:
浏览器中有两个引擎——JavaScript引擎和渲染引擎,它们对应了浏览器的两个线程。这两个引擎各司其职:
JavaScript引擎解析并执行JavaScript代码。
渲染引擎对界面进行绘制或者重绘(对DOM的渲染)。
在浏览器取得HTML文档并解析HTML的时候,浏览器会:
对DOM树进行解析。解析
遇到
由于:
脚本执行和渲染DOM的并发可能会引发严重的冲突,
所以:
JavaScript引擎和渲染引擎所在的两个线程被设计为互斥的!
这就意味着:
在执行
解决方案:
调用jQuery得show方法,把遮罩元素关联到show方法,jQuery的show方法回在执行完[b]渲染在进行脚本的执行。[/b]
用户上传文件,点击上传,提示正在上传,请稍等,并且显示遮罩层,遮罩住整个页面,这里上传用得是异步上传。
问题:
当点击上传,没有触发遮罩层效果,而是在ajax执行完毕后才显示遮罩层。
原因:
浏览器中有两个引擎——JavaScript引擎和渲染引擎,它们对应了浏览器的两个线程。这两个引擎各司其职:
JavaScript引擎解析并执行JavaScript代码。
渲染引擎对界面进行绘制或者重绘(对DOM的渲染)。
在浏览器取得HTML文档并解析HTML的时候,浏览器会:
对DOM树进行解析。解析
<body>中标签内容时,能形成渲染树,并渲染其中的元素。这个是在渲染引擎中做的。
遇到
<script>标签时(注意解析HTML时遇到的script标签),基于JavaScript可能会修改DOM的考虑,其中的内容将会在此时被执行(如果是外部JS文件的代码,会先加载这个文件资源,这部分后面再表)。执行JavaScript代码是在JavaScript引擎中做的。
由于:
脚本执行和渲染DOM的并发可能会引发严重的冲突,
所以:
JavaScript引擎和渲染引擎所在的两个线程被设计为互斥的!
这就意味着:
在执行
<script>中内容时,浏览器会切换到JavaScript引擎所在的线程,此时渲染引擎所在的线程会阻塞,故其后元素的解析和渲染会暂停。
解决方案:
调用jQuery得show方法,把遮罩元素关联到show方法,jQuery的show方法回在执行完[b]渲染在进行脚本的执行。[/b]
$("#zhezhao").show(function(){ var formData = new FormData($( "#uploadFile" )[0]); $.ajax({ url: 'url' , timeout:100000, type: 'POST', data: formData, async: false, cache: false, contentType: false, processData: false, success: function (returndata) { }, error: function (error) { }, complete : function(XMLHttpRequest,status){ //请求完成后最终执行参数 } }); });
相关文章推荐
- java web项目中的jsp页面发送ajax请求404错误
- 遇到的问题---jsp的ajax请求相同页面,服务端更新后浏览器仍然显示第一次的内容
- JSP页面Ajax发送请求与乱码解决
- 从jsp页面发送ajax请求,servlet接受参数并返回json数据
- Ajax发送POST请求SpringMVC页面跳转失败
- jsp页面发送ajax请求实例
- Struts2发送ajax请求并在页面显示结果
- 遇到的问题---jsp的ajax请求相同页面,服务端更新后浏览器仍然显示第一次的内容
- jQuery,ajax请求返回长数字字符串,jsp页面不显示为科学计数法
- 前端webview,页面加载,发送Ajax请求,请求失败,https,http
- Ajax发送POST请求SpringMVC页面跳转失败
- Ajax发送POST请求SpringMVC页面跳转失败
- 通过Ajax请求的JS值在JSP中显示
- ajax 页面请求后,jsp页面定位
- 如何让ajax技术显示数据的jsp页面第一次加载就加载默认查询数据
- 在发送ajax请求时加时间戳或者随机数去除js缓存
- jquery 使用ajax请求数据显示到页面表格中
- 在发送ajax请求时加时间戳或者随机数去除js缓存
- 当 jquery 发送 ajax 请求的时候遇到服务端session过期超时返回 302 跳转登陆页面的时候怎么办的处理方法
- java在线支付---06,07,08_在线支付_编写将数据提交给易宝支付的JSP页面,集成和测试向易宝发送支付请求,实现浏览器自动向易宝发送支付请求