让ajax更加友好,实时显示后台处理进度。
来源:互联网 发布:北欧家具淘宝 编辑:程序博客网 时间:2024/06/11 20:40
======================================================
注:本文源代码点此下载
======================================================
ajax应用越来越多,大部分ajax处理都是在前台显示1个"loading...",然后把数据提交给服务器进行处理,处理完毕后显示"处理完毕"。
我们能否让ajax更加友好点,实时显示服务器处理的进度了?这在一些长时间的请求中尤其重要,比如上传文件、发送邮件、批量处理数据。
答案当然是可以的,不然就不会写这个了,对吧,^_^。
ajax应用越来越多,大部分ajax处理都是在前台显示1个"loading...",然后把数据提交给服务器进行处理,处理完毕后显示"处理完毕"。我们能否让ajax更加友好点,实时显示服务器处理的进度了?这在一些长时间的请求中尤其重要,比如上传文件、发送邮件、批量处理数据。答案当然是可以的,不然就不会写这个了,对吧,^_^。
存在的问题:
要解决实现上面的功能,需要解决下面几个问题:
1. 服务器如何在处理一部分数据后传递部分response到浏览器。
2、浏览器如何能处理服务器传递过来部分数据,并保持http连接直到处理完全完毕。
要解决第1个问题,使用flush让response分块进行呈现就可以了,具体请参考我另一遍随笔"flush让页面分块,逐步呈现";
第2个问题,则需要用到xmlhttprequest的readystate状态,w3c对readystate 定义如下几个值:
unsent = 0;// 没有发送请求
opened = 1;// 已经打开http连接
headers_received = 2; // 接收到response header
loading = 3;// 真正接收response body
done = 4;// 请求接收完毕
相信状态4大家是天天在用,而我们这里需要用到就是状态3。
实例:
废话少说,代码实例比什么文字解释都管用。我们这里假设服务器的1个处理需要6秒种,每秒种处理1条记录,总共处理6条记录,我们需要服务器每处理完1条数据,客户端则显示处理进度(包括文字和进度条)。
服务器端代码(下面jsp代码):
html代码:
提交数据
运行效果图:
缺点:
看到这里或许你已经蠢蠢欲动,想自己动手试试了。但是注意上面的方法虽好,但也有个缺点,就是浏览器的支持问题。目前ie所有版本的浏览器都不支持 xhr.readystate == 3状态,ie浏览器不支持在response响应完毕前读取responsetext属性。具体可查看msdn :xmlhttprequest object
基于webkit的浏览器支持的不是很好,需要设置content-type:application/x-javascript才行(经测试发现content-type:text/html在有些情况下正常,有些情况下又不正常,而用application/x-javascript都正常)。
看到了缺点后是否又打击了你的积极性了,其实针对ie,我们不需要做太多处理,ie不支持,就不会显示进度,就变成跟传统的ajax请求一样,一直显示1个loading直到请求完毕。我们只需要加1个简单的判断,判断如果是ie则不执行xhr.readystate > 2中的代码,如果不加判断,ie下会报js错误.
demo:
demo服务器不太好,而且在国外,随时可能会点击不了,而且有时候运行效果不是很好,大家知晓下,最好是把代码copy到本地进行测试.
请使用firefox或chrome查看demo,ie查看的效果跟一般的ajax没什么不一样.
http://213.186.44.204:8080/chunktest/index.html
======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/
- 让ajax更加友好,实时显示后台处理进度。
- 让爬虫更加友好
- Python显示进度条,实时显示处理进度
- 使用重写的$.ajax()实现后台处理进度显示(gif)
- 40个让你网站更加友好
- 图片加载进度实时显示
- android后台下载 进度实时更新
- 前端展示后台处理进度
- AspUpload实时上传进度的AJAX方法
- JS:让日期更加智能化地显示
- [js效果] 图片加载进度实时显示
- js效果 图片加载进度实时显示
- MVS子进程进度实时显示
- javascript使图片加载进度实时显示
- 使用asp.net 2.0 客户端回调功能显示后台处理进度
- 前端实时更新后端处理进度
- 请求WebMethod,Ajax处理更加简练
- Android程序设计:显示后台任务进度对话框
- Windows8开发指南(12)Windows 8专有开发工具Visual Studio 11新特性
- Windows8开发指南(13)使用 SkyDrive 将“Windows 8”应用程序扩展到云
- Windows8开发指南(14)开发第一个基于Windows8的Windows azure云计算程序
- Ajax访问Xml Web Service的安全问题以及解决方案
- dedecms 系统的 data/rssmap.html不存在!更新了也没有。。。
- 让ajax更加友好,实时显示后台处理进度。
- 使用 jQuery 简化 Ajax 开发
- [导入]Delphi 2009 泛型容器单元(Generics.Collections)[1]: TList
- 经过三个月用Delphi7.0开发的长沙市建设工程招标投标评标系统,C#版本会在近期推出,欢迎关注!呵呵
- java开发环境eclipse的使用(模块代码折叠、可视化开发插件、生成Jar插件)
- 使用扩展方法创建 HTML Helper
- HTML5无所不在 HTML5心须知道的十件事
- Delphi 的绘图功能[14] - 图像类
- HTML 5 参考手册