gpt4 book ai didi

asp.net线程批量导入数据时通过ajax获取执行状态

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 26 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章asp.net线程批量导入数据时通过ajax获取执行状态由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

前言 。

最近因为工作中遇到一个需求,需要做了一个批量导入功能,但长时间运行没个反馈状态,很容易让人看了心急,产生各种臆想!为了解决心里障碍,写了这么个功能.

通过线程执行导入,并把正在执行的状态存入session,既共享执行状态,通过ajax调用session里的执行状态,从而实现反馈导入状态的功能! 。

上代码: 前端页面 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
<!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 >

后台页面:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
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,共享完毕! 。

总结 。

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流.

原文链接:http://www.cnblogs.com/LittleBai/p/6179183.html 。

最后此篇关于asp.net线程批量导入数据时通过ajax获取执行状态的文章就讲到这里了,如果你想了解更多关于asp.net线程批量导入数据时通过ajax获取执行状态的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com