• 关于

    js 往一个文件存数据库

    的搜索结果

问题

【javascript学习全家桶】934道javascript热门问题,阿里百位技术专家答疑解惑

管理贝贝 2019-12-01 20:07:22 6202 浏览量 回答数 1

回答

ajax异步的,单单settimeout不行,得获取返回之后ajax递归###### 频繁轮询用webSocket比较好 ###### 后台: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); ######回复 @blue_think : servlet 3.0有异步请求######回复 @blue_think : 我不同意你的说法,请看我对这个回复的引用。######session和cookies关联。之前试过如果程序没处理完,session根本获取不到,能获取到的时候已经100%了。所以如果不是用flush强制输出,不然就是进度存到数据库,或者写入到实际文件中。###### 刚好今天写了一个。 我需要检测核销订单的状态(数据库),然后页面上进行相应的变化。 //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("没有订单"); } }); } ######setTimeout  ###### 不知道你这个处理程序一般是多长时间。 你可以在后台处理数据,程间隔一段时间flush()一次处理结果到客户端,只到全部处理完成再response.end()掉这个链接。 客户端用xmlhttprequest监听onreadystatechange事件,获取xmlhttprequest的readystate,为3的时候就可以开始不断的获取到responseText的数据(实时,但是不一定是完整的)。 比如你的后台每次这样flush进度。第一次"1,",第二次"2,",第三次"3,"。这样客户端三次readystatechange获取的结果就是: 第一次 "1," 第二次 "1,2," 第三次 "1,2,3," 以此类推。 但是这样又有一个缺点就是,这个http连接可能会被浏览器本身关闭,因为早期的一些ie浏览器,会忽略keep-alive这个头,大约1分钟就自己关了,所以如果你的处理时间很长,比如要几分钟的话,这个方案可能就不是很合适。 ######这个不难,后台程序要将当前进度放到session中,Ajax定时去获取进度并显示;达到100%时要在session中保持一定时间(一般是启动一个Timer任务定时删除),以在下次Ajax获取时再自动删除掉这个session数据或者达到定时时间时自动删除session数据(避免内存泄漏),后者是防止前台离开或刷新页面而停止了Ajax请求。###### 假设你的上传Excel, 以及解析Excel都是ok的。 当程序一条条插入数据库时,正常情况下这个时间间隔是非常非常短的也就几毫秒(不排除当时连接数据库很慢很慢)。假设你页面ajax每一秒去轮训一下这个状态, 正常情况下, 你拿到的这个状态值也就处理完了。 所以这种显示百分比也就骗骗人了! ######回复 @Solid : 优化一下的话,就把list变成count,一个是100,一个从0开始。######赞同,百分百就是骗人的,千万别为了这个而浪费大好时光。 从Excel里取出数据,定义两个变量(list)到session,一个记录初始化时的条数,另一个List设置为空,在插入数据库时往这个List里也插入一条数据,Ajax请求不要操作数据库,直接访问两个List的size的比值,这个比值就是进度条数据了。###### 进度条都是假的~也就是用户体验好些而已。。 跟分页类似,首先先要获取数据多少条,一次导入多少条。。比如:1000/100 = 10 把进度条分10份,ajax一次,传page。后台根据page导入。导入成功,页面相应,进度条走1,ajax传page+1 ######楼上的可以试试. 

kun坤 2020-06-07 22:00:05 0 浏览量 回答数 0

问题

【Java学习全家桶】1460道Java热门问题,阿里百位技术专家答疑解惑

管理贝贝 2019-12-01 20:07:15 27612 浏览量 回答数 19

阿里云高校特惠,助力学生创业梦!0元体验,快速入门云计算!

学生动手场景应用,快速了解并掌握云服务器的各种新奇玩法!
阿里云大学 云服务器ECS com域名 网站域名whois查询 开发者平台 小程序定制 小程序开发 国内短信套餐包 开发者技术与产品 云数据库 图像识别 开发者问答 阿里云建站 阿里云备案 云市场 万网 阿里云帮助文档 免费套餐 开发者工具 企业信息查询 小程序开发制作 视频内容分析 企业网站制作 视频集锦 代理记账服务 企业建站模板