时间:2021-07-01 10:21:17 帮助过:34人阅读
输出结果到客户端
- <br><% <br>// 下面设置Content-Type:application/x-javascript 是为了适应Webkit的浏览器(chrome,safari) <br>response.setHeader("Content-Type","application/x-javascript"); <br>int count = 6; // 处理6条数据 <br>for(int i=0;i<count;i++){ <br>// 处理完毕一条,
- <br><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <br><html xmlns="http://www.w3.org/1999/xhtml"> <br><head> <br><style> <br>#divProgress{width:300px;height:24px;position:relative;} <br>#divProgress div{position:absolute;left:0;top:0;height:24px;} <br>#progressBg{background-color:#B9F8F9;z-index:10;} <br>#progressText{z-index:15;text-align:center;width:100%;} <br></style> <br></head> <br><body> <br><div id="divProgress"> <br><div id="progressBg"></div> <br><div id="progressText"></div> <br></div> <br><br /> <br><button onclick="send()">提交数据</button> <br><script> <br>var t = document.getElementById("progressText"); <br>var bg = document.getElementById("progressBg"); <br>function send(){ <br>t.innerHTML = "loading..."; <br>bg.style.width = "0px"; <br>var xhr = new window.XMLHttpRequest(); <br>if(!window.XMLHttpRequest){ <br>try { <br>xhr = new window.ActiveXObject("Microsoft.XMLHTTP"); <br>} catch(e) {} <br>} <br>xhr.open("post","http://localhost:801/ChunkTest/chunk.jsp?count=6"); <br>var oldSize=0; <br>xhr.onreadystatechange = function(){ <br>if(xhr.readyState > 2){ <br>var tmpText = xhr.responseText.substring(oldSize); <br>oldSize = xhr.responseText.length; <br>if(tmpText.length > 0 ){ <br>// 设置文本 <br>t.innerHTML = tmpText + "/6"; <br>// 设置进度条 <br>var width = parseInt(tmpText)/6*300; <br>bg.style.width = width+"px"; <br>} <br>} <br>if(xhr.readyState == 4){ <br>// 请求执行完毕 <br>t.innerHTML = "执行完毕"; <br>bg.style.width = "300px"; <br>} <br>} <br>xhr.send(null); <br>} <br></script> <br></body> <br></html> <br> <br>运行效果图: <br><img src="https://img.gxlcms.com//Uploads-s/new/2019-09-19-201919/20100602163650125.jpg" border="0"><br><img src="https://img.gxlcms.com//Uploads-s/new/2019-09-19-201919/20100602163701919.jpg" border="0"><br><br><strong>缺点: <br></strong><br>看到这里或许你已经蠢蠢欲动,想自己动手试试了。但是注意上面的方法虽好,但也有个缺点,就是浏览器的支持问题。目前IE所有版本的浏览器都不支持 xhr.readyState == 3状态,IE浏览器不支持在response响应完毕前读取responseText属性。 具体可查看MSDN : XMLHttpRequest Object <br><br>基于Webkit的浏览器支持的不是很好,需要设置Content-Type:application/x-javascript才行(经测试发现Content-Type:text/html在有些情况下正常,有些情况下又不正常,而用application/x-javascript都正常)。 <br><br>看到了缺点后是否又打击了你的积极性了,其实针对IE,我们不需要做太多处理,IE不支持,就不会显示进度,就变成跟传统的ajax请求一样,一直显示1个loading直到请求完毕。我们只需要加1个简单的判断,判断如果是ie则不执行xhr.readyState > 2中的代码,如果不加判断,IE下会报JS错误. <br><br><strong>DEMO: <br></strong><br>demo服务器不太好,而且在国外,随时可能会点击不了,而且有时候运行效果不是很好,大家知晓下,最好是把代码copy到本地进行测试. <br>请使用firefox或chrome查看demo,ie查看的效果跟一般的ajax没什么不一样. <br>http://213.186.44.204:8080/ChunkTest/index.html <br>转载请注明出处:http://www.cnblogs.com/BearsTaR/。 禁止商用!