Java:ajax进度条

在最近的一个项目中,有一个上传功能:上传一个cvs文件,然后解析此文件并写入数据库

由于经常需要传很大的文件,客户完成此功能往往需要40分钟,在这个过程中,页面也没有任何提示,用户体验非常不好?

为何不用ajax作一个进度条呢?

分两步完成此需求:

一:写一个简单的ajax,实现最简单的进度条功能。

二:把此进度条改造为项目可用的进度条。

一:最简单的进度条

1。客户端每2秒发送一个createXMLHttpRequest请求给服务端.并得到服务端返回的进度数据.根据服务端返回的数据,用javascript更新一个table的width,

这样就模拟了一个进度条.

progressBar.html.内容如下:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
  <head>
   <title>Ajax Progress Bar</title>
   <script type="text/javascript">...
     var xmlHttp;
     var key;
     function createXMLHttpRequest() ...{
       if (window.ActiveXObject) ...{
         xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
       }
       else if (window.XMLHttpRequest) ...{
         xmlHttp = new XMLHttpRequest();
       }
     }

     function go() ...{
       createXMLHttpRequest();
       clearBar();
       var url = "ProgressBarServlet?task=create";
       var button = document.getElementById("go");
       button.disabled = true;
       xmlHttp.open("GET", url, true);
       xmlHttp.onreadystatechange = goCallback;
       xmlHttp.send(null);
     }

     function goCallback() ...{
       if (xmlHttp.readyState == 4) ...{
         if (xmlHttp.status == 200) ...{
           setTimeout("pollServer()", 2000);
         }
       }
     }
     function pollServer() ...{
       createXMLHttpRequest();
       var url = "ProgressBarServlet?task=poll&key=" + key;
       xmlHttp.open("GET", url, true);
       xmlHttp.onreadystatechange = pollCallback;
       xmlHttp.send(null);
     }
     function pollCallback() ...{
       if (xmlHttp.readyState == 4) ...{
         if (xmlHttp.status == 200) ...{
           var percent_complete = xmlHttp.responseXML.getElementsByTagName("percent")[0].firstChild.data;
           var progress = document.getElementById("progress");
           var progressPersent = document.getElementById("progressPersent");
   progress.width = percent_complete + "%";
   progressPersent.innerHTML = percent_complete + "%";
           if (percent_complete < 100) ...{
             setTimeout("pollServer()", 2000);
           } else ...{
             document.getElementById("complete").innerHTML = "Complete!";
             //document.getElementById("go").disabled = false;
           }
         }
       }
     }    
function clearBar() ...{
  var progress_bar = document.getElementById("progressBar");
  var progressPersent = document.getElementById("progressPersent");
  var complete = document.getElementById("complete");
  progress_bar.style.visibility = "visible"
  progressPersent.innerHTML = "&nbsp;";
  complete.innerHTML = "Begin to upload this file...";
}
   </script>
  </head>
<body>
<div id="progressBar" style="padding:0px;border:solid black 0px;visibility:hidden">
<table width="300" border="0" cellspacing="0" cellpadding="0" align="center">
  <tr>
   <td align="center" id="progressPersent">86%</td>
  </tr>
  <tr >
   <td>
<table width="100%" border="1" cellspacing="0" cellpadding="0" bordercolor="#000000">
  <tr>
   <td>
<table width="1%" border="0" cellspacing="0" cellpadding="0" bgcolor="#FF0000" id="progress">
        <tr>
         <td>&nbsp;</td>
        </tr>
       </table></td>
  </tr>
</table>
</td>
  </tr>
  <tr>
   <td align="center" id="complete">completed</td>
  </tr>
</table>
</div>
<input id = "go" name="run" type="button" value="run" onClick="go();">

</body>
</html>

时间: 2024-10-30 18:05:25

Java:ajax进度条的相关文章

AJAX 进度条实现代码_AJAX相关

效果如下: 复制代码 代码如下: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Ajax Progress Bar</title> <script type="text/javascript"> var xmlHttp; var key; var bar_color = '

AJAX 进度条实现代码

效果如下: 复制代码 代码如下: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Ajax Progress Bar</title> <script type="text/javascript"> var xmlHttp; var key; var bar_color = '

java 使用进度条progressbar显示更新的问题,不能同步

问题描述 听说要想在一个frame上面,在点了一按钮的同时用progressbar进度条来显示操作的进度,得用个多线程处理.我也不要求这进度条显示多少百分比,就只要在那方法进行的时候来回摆动就行了.任务完成的时候就显示结束.privateJButtonButton=null;privateJPanelgetPane(){if(Cpane==null){pbar=newJProgressBar();pbar.setBounds(880,20,200,34);pbar.setStringPainte

java web进度条

问题描述 今天登陆一个php论坛,发现上传附件时,显示了文件上传的进度条,记起自己以前也研究过在J2EE下上传文件显示进度条的问题,现在整理一下,希望对以后遇到这方面问题的人能够有所帮助.获取文件上传的进度主要有二个问题需要解决,一个是上传文件后向服务器获取当前文件传输进度的问题,另一个就是服务器如何计算当前文件的传输进度.第一个问题很好解决,通过异步请求不断的向服务器请求文件上传的进度直到文件上传完毕就可以了.主要是如何解决第二个问题.现在第三方文件上传的组件很多,如commons-fileu

Java swing 进度条的显示问题

问题描述 最近在做一个C/S的通行软件,其中涉及到文件传输的功能,希望能够显示文件的上传进度,但是遇到一些问题无法解决:当传输文件时,进度条必须不断更新,但是Swing好像是单线程的,而且对Swing界面的更改不能在其他线程中进行(如果有错请指教),结果我现在的问题就是文件传输的过程中进度条不能更新,而且整个界面被阻塞,导致对界面无法进行其他操作,只有文件传输完成后才突然显示100%,下面贴出部分代码:包含进度条的类:publicclassTransmitBarextendsJPanel{pri

java实现在复制文件时使用进度条(java实现进度条)_java

思路分析: 因为既要有操作面板又要有进度条,所以肯定要出现两个继承JFrame类的窗体.先看被调用的进度条窗体,它不需要手动操作,所以类的内部实现一个方法就可以了.因为设计文件操作,所以要捕获异常.首先根据要复制的文件创建File对象,以及根据复制后文件的保存地址创建File对象,然后创建FileOutputStream对象,再创建FileInputStream对象,之后是ProgressMonitorInputStream对象,然后读取文件,如果总耗时超过2秒,将会自动弹出一个进度监视窗口.接

java Swing 进度条 多线程问题 附代码

问题描述 目标:当我点击主界面上的开始按钮,然后就会用大约1分钟来进行数据处理.但是在数据处理的时候,整个软件就像死了一样(其实没有),刷新还在继续,所以我想达到这样的效果:点击开始按钮,就弹出一个进度条在不停的动,表示程序正在运行,并没有死,然后进度条在持续更新,从1%到100%,当数据处理结束时,进度条消失,显示主界面,怎么实现呀!望大家处处注意!谢谢!问题:程序无法实现[处理中]对话框进度条与数据处理同步开始的功能.如何使他们同步进行?即:数据处理一开始,就让进度条对话框弹出,且从0%开始

基于Blod的ajax进度条下载实现示例代码

普通的浏览器下载 在web开发中,如果要实现下载功能,往往都是使用新开web页面或者是使用iframe的形式.实现起来其实很简单: <a target="_blank" href="download.zip" rel="external nofollow" >点击下载</a> //或者 <iframe style="display:none" src="download.zip"

java中进度条不能更新问题的研究

为什么进度条在事件处理过程中不更新,而是在完成后,从0%调到100%?分两种情况:1)在AWT事件线程中执行的操作当 应用程序在事件线程中执行长时间的操作时,会阻塞正常的AWT事件处理,因此阻止了重绘操作的发生.这同常会在下列情况下发生:应用程序响应一个来自用户 界面的请求时,在连接到一个按钮或其他GUI组件的事件处理程序中执行任务,任务的内容可能会需要较长时间,使事件线程挂起,直至远程系统发出答复为止. 当应用程序调用JProgressBar的setValue方法时,进度条可能更新期内部状态并