利用ajax和jquery-ui实现进度条

  前台运用ajax循环进行查询,后台用一般处理程序相应。进度条用的是jquery-ui。进度信息保存在HttpContext.Application中。

  代码作为简单记录示例,实际应用时应对资源释放、防止多线程混乱等做进一步控制。

  • 效果图:

  

  • 代码:

前台:

 1 <!DOCTYPE html>
 2 <html xmlns="http://www.w3.org/1999/xhtml">
 3 <head>
 4     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 5     <title></title>
 6     <script src="Scripts/jquery-2.1.4.min.js"></script>
 7     <script src="Scripts/jquery-ui-1.11.4.min.js"></script>
 8     <link href="Content/themes/base/all.css" rel="stylesheet" />
 9     <script type="text/javascript">
10         function GetProgress() {
11             $.ajax({
12                 url: "/Handler1.ashx",
13                 type: "POST",
14                 data: { "RequestType": "AjaxRequest", "Method": "GetProgress" },
15                 success: function (data) {
16                     if (data != -1) {
17                         //工作没有结束,继续查询进度
18                         setTimeout(GetProgress, 100);
19                         $("#progress").html(data);
20                         $("#progressbar").progressbar({ value: parseInt(data) });
21                     } else {
22                         //工作完成
23                         $("#progress").html("done");
24                         $("#progressbar").progressbar({ value: 100 });
25                         $("#btn1").attr("disabled", false);
26                     }
27                 }
28             });
29         }
30
31         function DoWork() {
32             //禁用按钮
33             $("#btn1").attr("disabled", true);
34             $.ajax({
35                 url: "/Handler1.ashx",
36                 type: "POST",
37                 data: { "RequestType": "AjaxRequest", "Method": "DoWork" }
38             });
39             //开始查询进度
40             setTimeout(GetProgress, 500);
41         }
42     </script>
43
44 </head>
45 <body>
46     <div>
47         <input type="button" id="btn1" value="开始" onclick="DoWork();" />
48         <label id="progress"></label>
49         <div id="progressbar"></div>
50     </div>
51 </body>
52 </html>

后台:

 1 // 2015年12月16日 09:53:11
 2 // David Huang
 3 // 进度条示例
 4 namespace ProgressTest
 5 {
 6     using System;
 7     using System.Threading;
 8     using System.Web;
 9
10     /// <summary>
11     /// Handler1 的摘要说明
12     /// </summary>
13     public class Handler1 : IHttpHandler
14     {
15         // context
16         private HttpContext context;
17
18         public bool IsReusable
19         {
20             get
21             {
22                 return false;
23             }
24         }
25
26         public void ProcessRequest(HttpContext context)
27         {
28             this.context = context;
29             if (context.Request["RequestType"] == "AjaxRequest")
30             {
31                 if (context.Request["Method"] == "GetProgress")
32                 {
33                     context.Response.Clear();
34                     context.Response.Write(this.GetProgress());
35                     context.Response.End();
36                 }
37                 else
38                 {
39                     this.DoWork();
40                 }
41             }
42         }
43
44         /// <summary>
45         /// 开始工作
46         /// </summary>
47         private void DoWork()
48         {
49             for (int i = 0; i < 100; i++)
50             {
51                 // 记录进度
52                 // 实际应用中需要进一步控制(利用用户信息、cookies等),防止并发造成混乱
53                 this.context.Application["progress"] = i + 1;
54                 Random r = new Random();
55                 Thread.Sleep(r.Next(10, 100));
56             }
57             // 完成后释放资源
58             this.context.Application["progress"] = null;
59         }
60
61         /// <summary>
62         /// 查询进度
63         /// </summary>
64         /// <returns>进度</returns>
65         private int GetProgress()
66         {
67             if (this.context.Application["progress"] != null)
68             {
69                 return (int)this.context.Application["progress"];
70             }
71             else
72             {
73                 return -1;
74             }
75         }
76     }
77 }
时间: 2024-12-26 23:41:26

利用ajax和jquery-ui实现进度条的相关文章

11 Jquery UI Progressbar 进度条插件

原文地址:https://www.cnblogs.com/springsnow/p/9461721.html

基于jQuery加载进度条特效代码

基于jQuery加载进度条特效代码是一款简单的加载新数据,获取数据jQuery进度条代码. 在线预览   源码下载 实现的代码. html代码: <div id="main"> <div class="demo"> <div class="bars"> <span id="bar">55</span> </div> <div class="

ajax大数据排队导出+进度条

描述 :我们现在有很多数据,分表存放,现在需要有精度条的导出.最后面有完整源码. 效果图: 点击导出,实现 点击导出 统计完成之后 点击确定 前面导出操作简单,从第二个导出操作开始: 点击"确定"调用exportCsv函数 <a class="on" href="javascript:exportCsv();"><em>导出</em></a> exportCvs函数如下 function expor

UI UIView进度条,模拟手机充电功能

#import "JRProgres.h" @implementation JRProgres { UIView * _contentView; } - (instancetype)initWithFrame:(CGRect)frame{// 重写构造方法一次创建3个视图,分别为最外层的绿框.子1白底.子2红条 self = [super initWithFrame:frame]; if (self) { //1. 设置边框为绿色 self.backgroundColor = [UIC

jQuery 实现下载进度条

//ajax异步上传 $.ajax({ url: "${pageContext.request.contextPath }/upload", type: "POST", data: formData, xhr: function(){ //获取ajaxSettings中的xhr对象,为它的upload属性绑定progress事件的处理函数 myXhr = $.ajaxSettings.xhr(); if(myXhr.upload){ //检查upload属性是否存在

jQuery实现简单进度条效果

一个用jQuery实现的简单进度条,当加载页面时,屏幕顶部出现一条极细的小线条,加载页面时会显示加载进度. 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>jquery实现的简单进度条效果</title> 6 <style> 7 #web_loading{ 8 z-inde

jquery——彩色投票进度条

一.需求 如下图 重点是要实现进度条. 二.分析 html5新增及删除标签一文中提到过html5新增了progress标签.但是肯定有兼容性问题.生成环境不适用,所以要模拟实现. 原理:动态设置<p>的子元素<span>的宽度值. 1.简单的雏形 假设只有一个进度条,如下,我们只需要知道p元素的宽度,span元素的百分比,相乘即得到span的宽度,浏览器加载时动态设置span的宽度即可实现进度条的效果. <style> .long{width:100px;border:

ajax上传文件带进度条的思路

首先,需要2个重要的数据,total(文件总大小)和loaded(已经上传的大小),用 loaded/total,然后不断的更新进度条即可: 问:怎么拿到这两个重要数据呢? 答:在html5中有一个上传过程事件onprogress,在这个事件中可以读到这两个数据loaded和total:上传的时候不断的触发这个函数,然后更新进度条即可: 1 xhr.upload.onprogress = function(ev){ 2 if(ev.lengthComputable){ 3 //有可能文件时分块上

异步上传文件(jquery.form)+进度条+上传到ftp服务器

最近写了一个小项目需要上传文件显示进度条到ftp,总结一下分享 我用的是jQuery.form.js上传 ftp服务器,自己百度去搭建很简单的 Talk is cheap.Show me your code.         GitHub上面的源码:https://github.com/Vinkong/learngit aspx页面 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Def

使用AsyncTask后台下载图片并在UI更新进度条和现实图片

UI上的设定就不贴了,下面是fragment相应类的,基本上可以直接用到Activity上去(受权威指南影响,现在强烈喜爱Fragment) 1 public class DownloadFragment extends Fragment { 2 3 Button mFetchButton; 4 ProgressBar mProgressBar; 5 EditText mURLEditText; 6 ImageView mImageView; 7 8 @Override 9 public Vie