客户端关键代码
下面使用iframe模拟异步交互技术,使用轮询的方式,实现数字累加功能。
客户端代码主要包含3个部分:定时向服务器端发送请求、接收服务器端返回的信息及展示服务器端返回的信息。
客户端,首先创建index.html页面
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <iframe id="iframe" style="display: none;"> </iframe> <div id="message" style="height: 400px;width: 100%;overflow: auto;border: 1px solid #c0c0c0;"> </div> <label for="text">内容:</label><input type="text" id="text" value="测试!"> <input type="button" id="sendContent" value="发送"> <script type="text/javascript"> function addMessage(counts) { var messageElement = document.getElementById("message"); messageElement.innerHTML += counts; } function f() { if (true) { var iframeElement = document.getElementById("iframe"); iframeElement.src = iframeElement.src; setTimeout(f, 5 * 1000); } } setTimeout(f, 5 * 1000); document.ready和onload的区别——JavaScript文档加载完成事件 页面加载完成有两种事件: 一是ready,表示文档结构已经加载完成(不包含图片等非文字媒体文件); 二是onload,指示页面包含图片等文件在内的所有元素都加载完成。 以下是原生js dom.onload事件的用法 */ window.onload = function () { var sendContent = document.getElementById("sendContent"); sendContent.onclick = function () { addMessage(document.getElementById("text").value+"<br>"); } }; </script> </body> </html>
|
服务端关键代码
为了模拟服务器响应客户端请求的处理,现在再新建一个response.html页面
1 2 3 4 5 6 7 8 9 10 11
| <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>response</title> </head> <body> <script>parent.addMessage('Hello!<br>');</script> </body> </html>
|
当时间到达5秒后,通过调函数f来更改iframe的src属性,重新向服务器发送请求,也就实现了轮询。
##工作原理
在实现iframe模拟异步交互技术中,利用iframe内嵌网页的特性,实现网页间数据的“隐形传输”。通过对主页面中隐藏的iframe内嵌网页不断进行刷新,可以不断地向服务器端提交请求,服务器端通过相应Servlet的doPost/doGet方法处理并响应。客户端所获得的响应数据,通过JavaScript调用DOM模型,可以将其更新于主页中,而不需要刷新整个父窗口的内容,当前页面其他的数据状态得以保留,同时减少了数据的传输量。