ajax实现前后台数据同步,实现类似进度条功能。

本文介绍了一种使用Ajax实现后台数据同步并在前端显示进度条的方法。通过设置Ajax请求,后台循环更新数据并通过response输出,前端通过onreadystatechange事件获取并处理响应,动态更新进度条内容。在最初的实现中,误用了Thread.sleep(),后来修正为在前端对响应文本进行分割处理,以避免对后台线程的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ajax小白,不知道怎么实现进度条功能,今天终于懂了皮毛并简单实现。

后台是一个循环,会多次向前台传值,但前台ajax只能连接一次。我实现的功能不需要使用json,所以只是传的文本。我有一个最大的错误的认知是,我以为response传过来的是一个个文本,然而并不是,它是一个流,一条一条的文本都会粘在这个流上,所以必须通过设置线程时间来确保获得每个文本的时间。看简略代码。

后台:

response.setContentType("text/html;charset=utf-8");
PrintWriter out=response.getWriter();

for(int i =0;i<list.size() ;i++){                    
                        out.println("此次同步涉及数据共"+list.size()+"条,正在更新第"+(i+1)+"条,请稍等...");
                        out.flush(); //不要关闭
                        Thread.currentThread().sleep(1000); 

}

 

前台ajax:

function progressBar(){    
        createXMLxBatchSynHttpRequest();
        var url = "/tech/fee.do?method=progress;
        xmlBatchSynHttp.open("GET", url, true);    
        var showProgress = document.getElementById("showProgress");
        var oldSize = 0; //对流进行裁剪,每次展示想要展示的部分
        xmlBatchSynHttp.onreadystatechange = function batchFeeSynchronizationCallback(){
            if(xmlBatchSynHttp.readyState > 2) {
                        var result = xmlBatchSynHttp.responseText.substring(oldSize);
                        oldSize = xmlBatchSynHttp.responseText.length;
                        showProgress.innerHTML = result;                       
                    }
            if (xmlBatchSynHttp.readyState == 4) {
                    if (xmlBatchSynHttp.status == 200) {
                        alert("批量同步成功");
                    }else{
                        alert("批量同步失败");
                    }
                    }
        };
        xmlBatchSynHttp.send(null);
    }

 

12-20修改:当时被批了,人为干预后台线程运行时间,简直傻到家。去掉sleep,在前台进行分割,具体代码如下

var words = new Array();
words = result.split('...');

if(result!='undefined'&&result!=''){
        showProgress.innerHTML = words[0];
               }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值