ajax如何设置后台处理进度,让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代码):

//下面设置Content-Type:application/x-javascript 是为了适应Webkit的浏览器(chrome,safari)response.setHeader("Content-Type","application/x-javascript");intcount=6;//处理6条数据for(inti=0;i

out.flush();//这里假设每条数据处理时间为1秒Thread.currentThread().sleep(1000);

}%>

html代码:

html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值