前言
最近因为工作中遇到一个需求,需要做了一个批量导入功能,但长时间运行没个反馈状态,很容易让人看了心急,产生各种臆想!为了解决心里障碍,写了这么个功能。
通过线程执行导入,并把正在执行的状态存入session,既共享执行状态,通过ajax调用session里的执行状态,从而实现反馈导入状态的功能!
上代码: 前端页面
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>批量导入数据</title> <style type="text/css"> .pop_body_con { width: 310px; position: fixed; top: 50%; left: 50%; margin-left: -150px; background: #eee; display:none; } .pop_body_con .pop_head { width: auto; padding: 10px 0; background: #fff; } .pop_body_con .pop_head a { display: block; color: #717274; font-size: 12px; text-decoration: none; text-align: center; } .pop_box { width: auto; overflow: hidden; padding: 45px 10px; } .pop_box .pop_text { float: left; } .pop_box .pop_text p { padding: 0; margin: 0; font-size: 12px; line-height: 18px; color: #717274;} .pop_box .progress_bar_con { float: left; width: 220px; position: relative; z-index: 2; } .pop_box .progress_bar_con p { margin: 0; padding: 0; font-size: 12px; color: #fff; line-height: 18px; width: 100%; text-align: center; position: absolute; left: 0; top: 0; z-index: 4; } .pop_box .progress_bar_con .progress_bar_start { width: 100%; height: 18px; background: #C4C0C0; } .pop_box .progress_bar_con .progress_bar_end { width: 16%; height: 18px; background: #2bd35d; position: absolute; left: 0; top: 0; z-index: 3; } .pop_box .progress_bar_con { float: left; } #loading-mask { width: 100%; height: 100%; position: fixed; top: 0px; left: 0px; z-index: 0; background-color: rgba(0, 0, 0, 0.34902); display: none; } </style> <script src="ajax-master/jquery.js"></script> <script> var MyInterval; $(function () { $("#startImport").click(function () { MyInterval = setInterval(getState, 1000); }); }); function getState() { $.ajax({ url: "test.aspx", type: "Post", data: { action: "getSession" }, success: function (msg) { if (msg != "null") { msg = eval('(' + msg + ')'); if (msg.being == 100) { setProcessBar(1, 1); $(".pop_body_con").hide(); $("#loading-mask").hide(); clearInterval(MyInterval); } else { $(".pop_body_con").show(); $("#loading-mask").show(); setProcessBar(msg.being, msg.count) } } } }); } function setProcessBar(exeFlag, exeMax) { $("#progressbar_text").html(parseInt(roundFun(exeFlag / exeMax, 2) * 100) + "%"); $("#progressbar_bar").attr("style", "width:" + parseInt(roundFun(exeFlag / exeMax, 2) * 100) + "%;"); } function roundFun(number, X) { X = (!X ? 2 : X); return Math.round(number * Math.pow(10, X)) / Math.pow(10, X); } </script> </head> <body style="background-color: #fff;"> <input id="startImport" type="button" value="导入数据" /> <div id="loading-mask" ></div> <div class="pop_body_con"> <div class="pop_head"> <a href="javascript:;">正在导入…请勿操作!</a> </div> <div class="pop_box"> <div class="pop_text"> <p>导入进度:</p> </div> <div class="progress_bar_con"> <p id="progressbar_text">0%</p> <div class="progress_bar_start"></div> <div class="progress_bar_end" id="progressbar_bar"></div> </div> </div> </div> </body> </html>
后台页面:
using System.Linq; using System.Threading; using System.Web; using System.Web.Script.Serialization; using System.Web.UI; using System.Web.UI.WebControls; public partial class test : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { string action = Request.Form["action"]; if (!string.IsNullOrEmpty(action)) { Hashtable temp = tmethod(); if (temp == null) { Thread trd = new Thread(new ParameterizedThreadStart(insertData)); trd.Start(action); } else { if (temp["reCode"].ToString() == "100") { Session.Remove("process"); } } JavaScriptSerializer ser = new JavaScriptSerializer(); String jsonStr = ser.Serialize(temp); Response.Write(jsonStr); Response.End(); } } public Hashtable tmethod() { return (Hashtable)Session["process"]; } private void insertData(object obj) { string action = obj.ToString(); int tCount = 100; for (int i = 0; i < tCount; i++) { Hashtable stateHash = setStateVal(0, i, tCount, action); Session["process"] = stateHash; //存入session,方便共享执行状态 Thread.Sleep(500); } Session["process"] = setStateVal(100, tCount, tCount, action); Thread.CurrentThread.Abort(); } private Hashtable setStateVal(int code, int beingV, int CountV, string action) { Hashtable stateHash = new Hashtable(); stateHash["reCode"] = code; //返回状态值 stateHash["being"] = beingV; //正在执行值 stateHash["count"] = CountV; //总值 stateHash["action"] = action; //总值 return stateHash; } }
ok,共享完毕!
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。
本文向大家介绍python Django批量导入数据,包括了python Django批量导入数据的使用技巧和注意事项,需要的朋友参考一下 前言: 这期间有研究了Django网页制作过程中,如何将数据批量导入到数据库中. 这个过程真的是惨不忍睹,犯了很多的低级错误,这会在正文中说到的.再者导入数据用的是py脚本,脚本内容参考至自强学堂--中级教程--数据导入. 注:本文主要介绍自己学习的经验总结
本文向大家介绍django批量导入xml数据,包括了django批量导入xml数据的使用技巧和注意事项,需要的朋友参考一下 django后台批量导入数据 在生产环境中,往往数据不是几条或者几百条,那么举个例子,将公司所有员工员工号或者帐号密码导入进后台,那就不建议你去后台一条条记录去添加了 如何从xml中批量导入svn记录 第一步: 为数据建立模型 既然建立好了模型,那我们再去建立接受我们xml文
1. 简介 您可使用数据导入功能将离线数据导入分析云系统,方便后期分析及应用。该功能仅开放给定制版客户,如您需要使用,请联系您的服务人员或发邮件到 ext_analytics@baidu.com 购买。建议在如下场景中可使用该功能: 埋点数据缺失需要补录 服务端收集的数据需要入库 其它离线数据需完善补充 2. 使用说明 您可从 管理-分析云设置-数据导入 进入页面,在数据导入页面可查看 数据导入指
本文向大家介绍jQuery通过ajax快速批量提交表单数据,包括了jQuery通过ajax快速批量提交表单数据的使用技巧和注意事项,需要的朋友参考一下 当表单数据项很多时,手动获取表单项的值将变得效率低下,结合jQuery提供的函数serialize(),我们可以实现快速获取数据并提交表单数据。 请看下面的表单: 我们可以通过自定义函数getFormData()来获取表单的数据,请看下面的例子:
我试图在ProductFeature表中插入product对象。但我做不到。如何在下面的impex标题中插入值?
问题内容: 我想将页面上的一些数据发送到servlet 所以我写了下面的jQuery来做到这一点 我使用所有数据构建一个json字符串,并将其直接发送到servlet 但是我不知道如何从servlet中的ajax获取全部数据 如果查看来自chrome的请求标头的Form Data段 您会看到整个json字符串是关键。 问题答案: 看这里, 您的归属是错误的。它不应该是字符串,而是真实的JSON对象