1. 程式人生 > >利用AJAX技術實現網頁無重新整理進度條顯示

利用AJAX技術實現網頁無重新整理進度條顯示

在網頁中實現頁面無重新整理的進度條顯示不是一件很麻煩的事情,但如果這個進度條要能準確反映當前事務或者複雜邏輯的執行進度,那麼卻並不是一件容易的事情,目前AJAX技術流行,所以本文作者試想通過AJAX來實現網頁準確進度條,以銄讀者。
首先應該想一個問題,複雜事務或者事務邏輯如果不按執行緒方式執行,執行在JAVA執行中根本無法跳過複雜事務去處理進度顯示,所以我們這邊很自然的想到複雜事務或者業務邏輯用多執行緒實現。
再想另一個問題,事務處理應該需要網頁上的一系列引數資訊的,那麼如何獲取這些引數呢,這個似乎容易想到,傳一個HttpServletRequest過去就可以了。
為了進度條公用,所有的複雜事務處理都應該實現同一個介面或者抽象類,我這裡用了一個介面,如下:
public interface IprogressBar {
  public void execute(HttpServletRequest req,String pbid);//執行復雜事務
}
用一個實現多執行緒的抽象類,如下:
public abstract class AbstractProgressBar extends TimerTask implements IprogressBar {
private HttpServletRequest request;
private String pbid;
public AbstractProgressBar(){
}
//子類必須過載這個函式
public abstract void execute(HttpServletRequest req, String pbid);
public void run() {
execute(request,pbid);
}
public void setRequest(HttpServletRequest req){
this.request=req;
}
public void setPbid(String pbid){
this.pbid=pbid;
}
}
設計到具體專案不便給出程式碼,這裡我另外寫了一個測試類,也就是執行復雜事務處理的類,如下:
public class TestPB extends AbstractProgressBar{
public void execute(HttpServletRequest req, String pbid) {
String sql="insert into temp_table(idx)values(?)";
int pid=Integer.parseInt(pbid);
ProgressBar pb=new ProgressBar(pid,300,0,1);
//模擬大事務
for(int i=0;i<300;i++){
DbUtils.executeUpdate(sql,new Object[]{new Integer(i)});
//控制進度
pb.stepIt();
}
}
}
 接著利用AJAX技術來實現網頁的無重新整理進度條實現,程式碼如下:
<%@ page contentType="text/html;charset=UTF-8"%>
<html>
<head>
<title>無重新整理頁面進度條測試</title>
<STYLE TYPE="text/css">
<!--
BODY {OVERFLOW:scroll;OVERFLOW-X:hidden}
.DEK {POSITION:absolute;VISIBILITY:hidden;Z-INDEX:200;}
//-->
</STYLE>
<script type="text/javascript">
var xmlHttp;
var pbid;//進度條ID
function createXMLHttpRequest(){
if (window.ActiveXObject) {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
else if (window.XMLHttpRequest) {
xmlHttp = new XMLHttpRequest();
}
}
function checkDiv() {
var progress_bar = document.getElementById("progressBar");
if (progress_bar.style.visibility != "visible") {
progress_bar.style.visibility = "visible";
}else
{
progress_bar.style.visibility = "hidden";
}
}
function go() {
createXMLHttpRequest();
checkDiv();
var url = "../servlet/ProgressBarServlet?task=create&impcls=blogcn.pb.imp.TestPB";//其中blogcn.pb.imp.TestPB是複雜事務的實現類
var button = document.getElementById("go");
button.disabled = true;
xmlHttp.open("GET", url, true);
xmlHttp.setRequestHeader("Content-Type", "text/xml;charset=gb2312");
xmlHttp.onreadystatechange = goCallback;
xmlHttp.send(null);
}
function goCallback(){
if (xmlHttp.readyState==4) 
{
if (xmlHttp.status==200) {
pbid=xmlHttp.responseXML.getElementsByTagName("pbid")[0].firstChild.data;
setTimeout("pollServer()", 2000);
}
}
}
function pollServer() {
createXMLHttpRequest();
var url = "../servlet/ProgressBarServlet?task=poll&pbid="+pbid;
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;
if (percent_complete < 100) {
    PB1.pos=percent_complete;
        PB1.Update();   
setTimeout("pollServer()", 2000);
} else {
    PB1.pos=100;
        PB1.Update();
document.getElementById("go").disabled = false;
}
}
}
}
</script>
</head>
<body>
          <input type="button" value="執行大事務" id="go" onclick="go();"/>
    <DIV id="progressBar">
       <script language="javascript">
     var PB1=new TProgressBar("myPB1",220,180,375,20);
     PB1.Create();
     PirateCount=100;
     PID=PirateCount-2;
     PB1.Reposition();
     PB1.max=PID;
    </script>
</body>
</html>
整個頁面將不會有任何重新整理。

相關推薦

利用AJAX技術實現網頁重新整理進度顯示

在網頁中實現頁面無重新整理的進度條顯示不是一件很麻煩的事情,但如果這個進度條要能準確反映當前事務或者複雜邏輯的執行進度,那麼卻並不是一件容易的事情,目前AJAX技術流行,所以本文作者試想通過AJAX來實現網頁準確進度條,以銄讀者。首先應該想一個問題,複雜事務或者事務邏輯如果不

Django實戰: 利用AJAX技術實現博文實時搜尋

學習Python Web和Django開發不能只學習Python。我們有時必需藉助其它技術比如AJAX實現我們想要的功能。今天我們就要利用Django 2.0 + AJAX開發一個功能性頁面: 我們一邊

.net利用ajax技術實現圖片上傳並回顯到介面

最近在開發過程中遇到了一個非常鬱悶的問題,就是圖片傳到fileUpload中時想要實現回顯到image控制元件中。 在前臺,fileUpload.change()事件中判斷fileUpload.val()不為空,把改路徑值賦給image.attr("src",$('#fil

利用ajax技術實現通用分頁,在jsp頁面呈現

package com.softeem.dto;//dto資料傳輸物件 import java.util.ArrayList; import java.util.List; public class PageBean<T> {private int curren

實現網頁載入過程進度

(慕課網學習記錄) *進度條下載網址:https://preloaders.net/ *首先在網頁同目錄下建立images資料夾,放入下載好的進度條檔案 <!DOCTYPE html> <html> <head> <meta cha

Canvas實現多個圓形進度顯示百分比,並繫結各自的click事件

Canvas實現多個圓形進度條顯示百分比,並繫結各自的click事件 目錄 Canvas實現多個圓形進度條顯示百分比並繫結各自的click事件 目錄 實現效果 製

python實現檔案下載(包含進度顯示,檔案大小顯示,下載速度顯示)

不多說了,直接上程式碼記錄: #!/usr/bin/lgy #-*-coding:utf-8-*- import urllib2,threading from PyQt4.QtGui import * from PyQt4.QtCore import * from pu

利用ajax和JSP技術實現網頁中表單的區域性重新整理(只重新整理表單資料,而不重新整理整個頁面)

在web開發中有時有區域性重新整理的需求,這樣做的好處是克服了頁面整體重新整理對網路速度受限的情況。 1.MySQL資料表如下(簡單舉例): 表名:stu_info stuId                 int                    PK    NN

Ajax技術核心實現動態重新整理

Ajax實現的web互動效果跟傳統的大不相同,它通過Ajax 引擎,使得應用過程很自然,操作很流暢,因為其只和伺服器交換有用的資料,而頁面顯示等不必要的資料則不再重新載入。Ajax 引擎其實就是JavaScript、XML、XMLHttpRequest等等各項技術的綜合應

ajax技術實現 重新整理實現使用者登入

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="logon.ascx.cs" Inherits="userControl_logon"%><script language="javascript" type="text/

基於jQuery的ajax系列之用FormData實現頁面重新整理上傳

接著上一篇ajax系列之用jQuery的ajax方法向伺服器發出get和post請求寫,這篇主要寫如何利用ajax和FormData實現頁面無重新整理的檔案上傳效果,主要用到了jQuery的ajax()方法和XMLHttpRequest Level 2的FormData介面。

jq.ajax+php+mysql資料庫實現使用者重新整理評論

最終效果圖: html+css程式碼 <html> <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/> <style> *{margin:0;pad

Bootstrap Paginator分頁外掛+ajax 實現動態重新整理分頁

之前做分頁想過做淘寶的那個,但是因為是後臺要求不高,就Bootstrap Paginator外掛感覺還蠻容易上手,所以就選了它。 Bootstrap Paginator分頁外掛下載地址: 1.這是需要分頁的頁面放的 js函式: <span style="font-

利用@media screen實現網頁布局的自適應

sel right ont min spl 布局 lec ati edi 利用@media screen實現網頁布局的自適應 優點:無需插件和手機主題,對移動設備友好,能夠適應各種窗口大小。只需在CSS中添加@media screen屬性,根據瀏覽器寬度判斷並輸出不同的長寬

Flask + Ajax + Mysql 實現網頁非同步載入(二)

Flask + Ajax + Mysql 實現網頁非同步載入(一) 二、jquery 和Ajax 實現前端請求 <script src="static/js/jquery.min.js" > </script> <script type="text/java

Flask + Ajax + Mysql 實現網頁非同步載入(一)

滾動條滑到底部時候,在當前頁面載入下一頁資料; 滾動條到達頂部時候,重新整理當前頁面。 一、flask 實現的伺服器端 @app.route('/',methods=['GET','POST']) def index(): '''新聞首頁''' page = reques

利用socket技術實現用java實現客戶端向服務端傳送檔案,伺服器端接收檔案並給出一個響應。

通訊是網路程式設計中重要的組成部分,而socket程式設計是網路程式設計的基礎。利用socket可以實現客戶端和伺服器端的通訊。下面我先把客戶端和伺服器端的程式碼粘上去再進行詳細的分析。 package test1; import java.io.File; import java.io

Qt:Qt實現網頁自動重新整理工具

使用Qt實現網頁重新整理工具 前言 最近在看一本《C++黑客程式設計揭祕和防範》 ,剛開始學,感覺書還不錯,有講一些windows API,不過裡面的工具都是使用VC++寫的,介面部分使用的mfc的一些API,感覺太不友好來,筆者 想的是 介面部分當然應該可以用,當下桌面端最流行

Vscode外掛 livereload配合chrome擴充套件程式livereload實現網頁自動重新整理(儲存時)

前段時間電腦系統壞了,重新裝系統後便是繁瑣的軟體重灌了(對於程式猿來說,開發環境才是大事),這不,重灌vscode外掛livereload時,竟然忘了它怎麼用了!!!?於是有要百度一波,但是,查了好幾個部落格才解決了我的問題。。。怪自己記性不好啦。。。好的,進入正題。

利用@media screen實現網頁佈局的自適應

優點:無需外掛和手機主題,對移動裝置友好,能夠適應各種視窗大小。只需在CSS中新增@media screen屬性,根據瀏覽器寬度判斷並輸出不同的長寬值 準備工作1:設定Meta標籤 首先我們在使用Media的時候需要先設定下面這段程式碼,來相容移動裝置的展示效果: