利用Ajax生成ProgressBar:实现同类大批量数据批量生成Html,并实时显示进度条,可查看处理日志

<!--
/*「AjaxProgressBar」 JavaScript Document   For details
   ==========================================================
   程序制作: 狼之舞(c) 2009-2019
   制作日期: 2009年06月08日
   联系方式:QQ-63858288
     MSN:usersmj@hotmail.com
    
   有关详情,请联系狼之舞 
   转载请注明出处并保留本说明
   ----------------------------------------------------------
   Powered by·Dancewolf(c) 2009-2019
   Technical Support:
    Tencent QQ:63858288
    E-mail:usrsmj@qq.com,usersmj@hotmail.com
   For details, please contact Dancewolf
   Reprint please indicate the source and to retain this note  
   ==========================================================
*/
//*==============================================================================*/
//*                                                                              */
//* 功能:实现同类大批量数据批量生成Html,并实时显示进度条,可查看处理日志        */
//*                                                                              */
//* 语法:var progressBar=new AjaxProgressBar()                                  */
//*    progressBar.initialize(doAction,logAction,instance[,parentNode])       */
//*                                                                              */
//* 参数:                                                                       */
//*      -doAction    [必需的]  执行URL                                          */
//*      -logAction   [必需的]  进度XML                                          */
//*      -instance    [必需的]  实例对像名称                                     */
//*      -parentNode  [可选的]  显示进度条的容器ID,如缺省不能批量调用。         */
//*                                                                              */
//* 使用条件:                                                                   */
//*      需要doAction不断生成logAction, logAction文件格式如下:                  */
//*      <root><log progress="0%"  success="" fail=""></log></root>              */
//*                                                                              */
//*==============================================================================*/
function AjaxProgressBar(){
 /*---------------------------------------------------------------------------*/    
 function InitAjax(){
  var Ajax=false;
  /*Microsoft*/
  try {
     Ajax = new ActiveXObject("Msxml2.XMLHTTP");
  } catch (e) {
     try {
     Ajax = new ActiveXObject("Microsoft.XMLHTTP");
     }catch (E) {
     Ajax = false;
     }
  }/*Mozilla*/
  if (!Ajax && typeof Ajax!='undefined') {
     Ajax = new XMLHttpRequest();
  }
   return Ajax;
 }
 /*---------------------------------------------------------------------------*/    
 /*   判断函数或对像是否存在  一定要添加try catch块,否则不起作用             */
 /*                                                                           */
 /* Javascript 的 typeof可以获取变量的类型,有如下6种返回值:                  */
 /* 1)number;                                                               */
 /* 2)string;                                                               */
 /* 3)boolean;                                                              */
 /* 4)object;                                                               */
 /* 5)function;                                                             */
 /* 6)undefined.                                                             */
 /*---------------------------------------------------------------------------*/    
 function objExists(objName){
  try{ 
   if(typeof eval(objName)=="undefined"){return false;}
   if(typeof eval(objName)=="object"){return true;}
  }catch(e){
   return false;
  }
 }
 function funExists(funName){
  try{ 
   if(typeof eval(funName)=="undefined"){return false;} 
   if(typeof eval(funName)=="function"){return true;}
  }catch(e){
   return false;
  }
 } 
 /*---------------------------------------------------------------------------*/   
 var instance="";
 var doAction="";
 var logAction="";
 var parentNode=null; 
 
 var btnStart=null;
 var btnAbort=null;
 var btnViews=null;
 var ProgressBarValue=null;
 var ProgressBarTitle=null; 
 
 var isCreate=false;
 var logTimer= null; 
 var logAjax = new InitAjax(); 
 var barAjax = new InitAjax(); 
 /*---------------------------------------------------------------------------*/ 
 this.initialize=function(_doAction,_logAction,_instance,_parentNode){
  try{
   if(isCreate){return false;}   
   instance=_instance;
   doAction=_doAction;
   logAction=_logAction;
   parentNode= document.getElementById(_parentNode); 
   
            if(doAction==null||doAction==""){alert("缺少 执行动作参数:doAction");return false;}
            if(logAction==null||logAction==""){alert("缺少 日志动作参数:logAction");return false;}    
   if(!objExists(instance)){ alert(instance+" 实例对像不存在");return false; }   
   if(parentNode){ batchMode();}else{singlemode();}
   AddEvent(instance);
   isCreate=true; 
  }catch(e){
      alert("初始化出错!");
  }
 }
 /*---------------------------------------------------------------------------*/ 
 this.Start=function(){
  btnStart.disabled=true;
  btnAbort.disabled=false;
  btnViews.disabled=true;
  try{
   barAjax.open("GET",doAction, true);
   barAjax.onreadystatechange =function(){
    /*
    0 请求未初始化(在调用 open() 之前)
    1 请求已提出(调用 send() 之前)
    2 请求已发送(这里通常可以从响应得到内容头部)
    3 请求处理中(响应中通常有部分数据可用,但是服务器还没有完成响应)
    4 请求已完成(可以访问服务器响应并使用它)
    */  
    if(barAjax.readyState==3){
     try{
     logTimer=window.setInterval(instance+".setProgress()",1000);
     //eval(instance+".setProgress();");
     }catch(e){
     alert(e)
     }
    }else if(barAjax.readyState==4){
     if(barAjax.status == 200){
     //clearInterval(logTimer);
     }else if(barAjax.status == 404){
     btnStart.disabled=true;
     btnAbort.disabled=true;
     btnViews.disabled=true; 
     clearInterval(logTimer);
     alert("执行文件不存在!!!");     
     }else{
     btnStart.disabled=true;
     btnAbort.disabled=true;
     btnViews.disabled=true; 
     clearInterval(logTimer);
     alert("系统出错:"+barAjax.status+",请与管理员联系!");     
     }      
    }  
   };
   barAjax.setRequestHeader("Accept-charset","gb2312");
   barAjax.setRequestHeader("If-Modified-Since","0");  //禁止缓存
   barAjax.send(null); 
  }catch(e){
   alert("执行出错:"+e)
  }    
 }
 /*---------------------------------------------------------------------------*/ 
 this.Abort=function(){
  try{
   barAjax.abort(); 
   clearInterval(logTimer);
   btnStart.disabled=false;
   btnAbort.disabled=true;
   btnViews.disabled=false;   
  }catch(e){
   alert("终止失败:"+e)
  }    
 }
 /*---------------------------------------------------------------------------*/ 
 this.Views=function(){
  window.open(logAction,"winLog","");
 } 
 /*---------------------------------------------------------------------------*/ 
 this.setProgress=function(){
  try{
   logAjax.open("GET",logAction, true);
   logAjax.onreadystatechange =function(){
    if(logAjax.readyState == 4){
     if(logAjax.status == 200){
      var xmlDOM = logAjax.responseXML;
      var progress=xmlDOM.getElementsByTagName("log")[0].getAttribute("progress");
      ProgressBarValue.style.width=progress;
      ProgressBarTitle.innerHTML=progress;
      if(progress=="100%"){
       clearInterval(logTimer);
       btnStart.disabled=true;
       btnAbort.disabled=true; 
       btnViews.disabled=false; 
      }     
     }else if(logAjax.status == 404){      
      alert(logAction+"文件不存在,将不能显示进度!");
     }else{
      alert("系统出错:"+logAjax.status+",请与管理员联系!");
     }
    }  
      };   
   logAjax.setRequestHeader("Accept-charset","gb2312");
   logAjax.setRequestHeader("If-Modified-Since","0");  //禁止缓存
   logAjax.send(null);
  }catch(e){
     alert("设置进度 出错:"+e)
  }
 } 
 /*---------------------------------------------------------------------------*/ 
 function batchMode(){
   /*ProgressBox*/
   var ProgressBox  =document.createElement("div");
   ProgressBox.name="ProgressBox";
   ProgressBox.style.setAttribute("width","420px");    
   ProgressBox.style.setAttribute("marginLeft","auto");
   ProgressBox.style.setAttribute("marginRight","auto");
   /*ProgressBar*/
   var ProgressBar  =document.createElement("div");
   ProgressBar.name="ProgressBar";
   ProgressBar.style.setAttribute("position","relative");    
   ProgressBar.style.setAttribute("padding","1px");
   ProgressBar.style.setAttribute("margin","2px");    
   ProgressBar.style.setAttribute("width","200px");
   ProgressBar.style.setAttribute("height","18px");
   ProgressBar.style.setAttribute("textAlign","left");
   ProgressBar.style.setAttribute("float","left");
   ProgressBar.style.setAttribute("cssFloat","left");
   ProgressBar.style.setAttribute("styleFloat","left");
   ProgressBar.style.setAttribute("backgroundColor","#F5F5F5");
   ProgressBar.style.setAttribute("border","1px solid #000000");                   
   /*---------ProgressBarValue---------*/
   ProgressBarValue  =document.createElement("div");
   ProgressBarValue.name="ProgressBarValue";
   ProgressBarValue.style.setAttribute("position","absolute");    
   ProgressBarValue.style.setAttribute("top","1px");
   ProgressBarValue.style.setAttribute("left","1px");
   ProgressBarValue.style.setAttribute("width","0%");
   ProgressBarValue.style.setAttribute("height","10px");
   ProgressBarValue.style.setAttribute("backgroundColor","#0000FF");
   /*---------ProgressBarTitle---------*/
   ProgressBarTitle  =document.createElement("div");
   ProgressBarTitle.name="ProgressBarTitle";
   ProgressBarTitle.style.setAttribute("position","relative");    
   ProgressBarTitle.style.setAttribute("top","2px");
   ProgressBarTitle.style.setAttribute("left","1px");
   ProgressBarTitle.style.setAttribute("height","18px"); 
   ProgressBarTitle.style.setAttribute("color","#FFCC00");        
   ProgressBarTitle.style.setAttribute("fontSize","10pt");
   ProgressBarTitle.style.setAttribute("textAlign","center");
   ProgressBarTitle.innerHTML="0%"      
   /*---------ProgressTools---------*/
   var ProgressTools  =document.createElement("div");
   ProgressTools.name="ProgressTools";
   ProgressTools.style.setAttribute("width","200px"); 
   ProgressTools.style.setAttribute("marginTop","2px");        
   ProgressTools.style.setAttribute("float","right");
   ProgressTools.style.setAttribute("cssFloat","right");
   ProgressTools.style.setAttribute("styleFloat","right");    
   btnStart  =document.createElement("input");
   btnStart.type ='button';
   btnStart.value=' 开始 ';
   btnAbort =document.createElement("input");
   btnAbort.type ='button';
   btnAbort.value=' 结束 ';
   btnAbort.disabled='disabled';
   btnViews =document.createElement("input");
   btnViews.type='button';
   btnViews.value=' 日志 ';
   btnViews.disabled='disabled'; 
   ProgressTools.appendChild(btnStart);
   ProgressTools.appendChild(btnAbort);
   ProgressTools.appendChild(btnViews);               
   /*                                */
   ProgressBar.appendChild(ProgressBarValue);
   ProgressBar.appendChild(ProgressBarTitle);
   ProgressBox.appendChild(ProgressBar);
   ProgressBox.appendChild(ProgressTools);
   parentNode.appendChild(ProgressBox);  
 }
 /*---------------------------------------------------------------------------*/ 
 function singlemode(){
  if(document.getElementById("ProgressBox")){
   alert("单一模式已经调用,不能重复/n请调用批量模式!");
   return false;
  }
  var outString="<div id='ProgressBox' style='width:420px;height:18px;margin-left: auto;margin-right: auto;'>";
  outString+="<div id='ProgressBar' style='position: relative;padding: 1px;border: 1px solid #000000;margin: 2px;width: 200px;height:18px;background-Color:#F5F5F5;font-size: 9pt;text-align: left;float: left;'>";
  outString+="  <div id='ProgressBarValue'  style='position: absolute;top:1;left:1;background-color: #0000FF;width:0%;height:18px;'></div>";
  outString+="  <div id='ProgressBarTitle'  style='position: relative;top:1;left:1;top:2px;font-size: 10pt;text-align: center; color: #FFCC00'>0%</div>";
  outString+="</div>";
  outString+="<div id='ProgressTools' style='width: 200px;margin-top: 2px;float:right;'>";
  outString+="  <input name='btnStart' type='button' id='btnStart' value=' 开始 ' />";
  outString+="  <input name='btnAbort' type='button' id='btnAbort' value=' 结束 ' disabled='disabled' />";
  outString+="  <input name='btnViews' type='button' id='btnViews' value=' 日志 ' disabled='disabled' />";
  outString+="</div></div>";
  document.write(outString);
  btnStart=document.getElementById("btnStart");
  btnAbort=document.getElementById("btnAbort");
  btnViews=document.getElementById("btnViews");
  ProgressBarValue=document.getElementById("ProgressBarValue");
  ProgressBarTitle=document.getElementById("ProgressBarTitle"); 
 }
 /*---------------------------------------------------------------------------*/ 
 function AddEvent(instance){
  btnStart.οnclick=function(){
   try{eval(instance+".Start();");}catch(e){alert(e);} 
  };
  btnAbort.οnclick=function(){
   try{eval(instance+".Abort();");}catch(e){alert(e);} 
  };
  btnViews.οnclick=function(){
   try{eval(instance+".Views();");}catch(e){alert(e);} 
  };  
 }
 /*---------------------------------------------------------------------------*/ 
}
//*==============================================================================*/
//*                         AjaxProgressBar End                                  */
//*==============================================================================*/
/*                                                                               */
/* 使用笔记:                                                                    */
/*                                                                               */
/* 非IE不支持 document.createElement("<input type='button' value=' 开始 ' />")   */
/*            insertBefore(btnStart,oChildNode)将oChildNode省略                  */
/*                                                                               */
/* 针对 input 在 IE 中 type 属性必须在前,其它属性必须在后           */
/*                                                                               */
/* 关于float                                                                     */
/*   -IE:obj.style.setAttribute("styleFloat","left")|obj.style.styleFloat="left" */
/*   -FF:obj.style.setAttribute("cssFloat","left")|obj.style.cssFloat="left"     */
/*                                                                               */
/*-------------------------------------------------------------------------------*/
-->

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值