使用Ajax不停获取数据库中的数据怎么做?

发布于 2021-11-29 08:13:00 字数 275 浏览 688 评论 14

一个用Excel文档导入数据的操作,需要显示导入时候的进度百分比。

这个该如何实现呢?

比如:我Excel中有100条数据,如果导入数据库中一条数据,那么在导入进行的时候显示1%。

领导给的思路是,将导入的数据保存到一个表里,然后Ajax不停的进行读取。

可是这个思路不知道该如何实现,也不知道该如何查,这个Ajax轮询可以做吗?Ajax轮询是什么?

还请大家多多指点!

谢谢大家!


如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(14

苍暮颜 2021-12-02 11:30:37

楼上的可以试试. 

风柔一江水 2021-12-02 11:30:26

进度条都是假的~也就是用户体验好些而已。。

跟分页类似,首先先要获取数据多少条,一次导入多少条。。比如:1000/100 = 10

把进度条分10份,ajax一次,传page。后台根据page导入。导入成功,页面相应,进度条走1,ajax传page+1

南汐寒笙箫 2021-12-02 11:30:24

赞同,百分百就是骗人的,千万别为了这个而浪费大好时光。 从Excel里取出数据,定义两个变量(list)到session,一个记录初始化时的条数,另一个List设置为空,在插入数据库时往这个List里也插入一条数据,Ajax请求不要操作数据库,直接访问两个List的size的比值,这个比值就是进度条数据了。

緦唸λ蓇 2021-12-02 11:30:21

假设你的上传Excel, 以及解析Excel都是ok的。 当程序一条条插入数据库时,正常情况下这个时间间隔是非常非常短的也就几毫秒(不排除当时连接数据库很慢很慢)。假设你页面ajax每一秒去轮训一下这个状态, 正常情况下, 你拿到的这个状态值也就处理完了。

所以这种显示百分比也就骗骗人了!

夜无邪 2021-12-02 11:30:21

回复
优化一下的话,就把list变成count,一个是100,一个从0开始。

霞映澄塘 2021-12-02 11:30:06

这个不难,后台程序要将当前进度放到session中,Ajax定时去获取进度并显示;达到100%时要在session中保持一定时间(一般是启动一个Timer任务定时删除),以在下次Ajax获取时再自动删除掉这个session数据或者达到定时时间时自动删除session数据(避免内存泄漏),后者是防止前台离开或刷新页面而停止了Ajax请求。

小情绪 2021-12-02 11:30:05

setTimeout 

狼亦尘 2021-12-02 11:29:52

刚好今天写了一个。

我需要检测核销订单的状态(数据库),然后页面上进行相应的变化。

//ajax短轮询获取后台核销的状态
function getStates(){
	jQuery.ajax({
        type: "POST",
        url: "#springUrl('/microVerification/getStates.in')",
        data: {
            orderNo: "$!order.orderNo",
        },
        dataType: "json",
        success: function (data) {
			if(data.result == "already"){
				//检测到已核销
				$("#yet").hide();
				$("#already").show();
				return;
			}else if(data.result == "yet"){
				//检测到未核销,继续调用
				setTimeout(function () { 
                    getStates();
                }, 5000);
			}else{
				//出错了
			}
        },
        error: function () {
            //alert("没有订单");
        }
    });
}

猫九 2021-12-02 11:22:18

session和cookies关联。之前试过如果程序没处理完,session根本获取不到,能获取到的时候已经100%了。所以如果不是用flush强制输出,不然就是进度存到数据库,或者写入到实际文件中。

狼亦尘 2021-12-02 11:14:49

回复
我不同意你的说法,请看我对这个回复的引用。

刘备忘录 2021-12-02 10:49:57

回复
servlet 3.0有异步请求

等风来 2021-12-02 09:52:10

后台:xls 文件处理逻辑

public Map updateFile(){

map= new hashmap();

int count = xls.count();

for(int i=0;i<count;i++){

//处理每一条数据

session.setAttribute("上传进度百分比",(int)((i+1+0.0)/count*100));

}

return map;

}

后台:/abc/a 

public Map getJd(){

map = new hashmap();

map.put("data",session.getAttribute("上传进度百分比"));

return map;

}

前台js:

var id = setInterval(function(){

$.post('/abc/a',function(d){

//d是json:返回0-100的数字

var data=d.data;

进度条对象.set进度(data);

if(data==100){

进度条对象.close();

clearInterval(id);

}

});

},500);

倚栏听风 2021-12-01 17:50:33

频繁轮询用webSocket比较好

毁梦 2021-11-30 19:11:51

ajax异步的,单单settimeout不行,得获取返回之后ajax递归

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文