4.4 创建自动刷新页面

<1>使用Ajax,用户就可以不必反复点击刷新按钮,而实现网页内容的自动刷新
<2>例程采用单击按钮后开始执行,实际中一般以onload事件代替
<3>setTimeout方法,允许以固定的时间间隔(单位为毫秒)执行给定的方法
<4>createRow()方法使用DOM动态创建内容;refreshTime()用于刷新定时器的值

页面代码:

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>Insert title here</title>
  <script type="text/javascript">
  var xmlHttp;

  alert("dasd");

  function createXMLHttpRequest(){
    if(window.ActiveXObject){
      xmlHttp = new ActiveXObject();
    }
    else if(window.XMLHttpRequest){
      xmlHttp = new XMLHttpRequest();
    }
  }

  //第一次请求获取全部数据
  function doStart(){

    createXMLHttpRequest();
    var url = "DynamicUpdateServlet?task=reset";
    xmlHttp.open("GET", url, true);

    xmlHttp.onreadystatechange = startCallback;
    xmlHttp.send(null);
  }

  function startCallback(){
    if(xmlHttp.readyState == 4){
      if(xmlHttp.status == 200){
        //每5秒查询是否有新数据
        setTimeout("pollServer()", 5000);
        //页面动态变化刷新时间
        refreshTime();
      }
    }
  }

  function pollServer(){
    createXMLHttpRequest();
    var url = "DynamicUpdateServlet?task=foo";
    xmlHttp.open("GET", url, true);
    xmlHttp.onreadystatechange = pollCallback;
    xmlHttp.send(null);
  }

  function refreshTime(){
    var time_span = document.getElementById("time");
    var time_val = time_span.innerHTML;
    var int_val = parseInt(time_val);
    var new_int_val = int_val-1;

    if(new_int_val > -1){
      //每秒执行一次刷新
      setTimeout("refreshTime()", 1000);
      time_span.innerHTML = new_int_val;
    }else{
      time_span.innerHTML = 5;
    }
  }

  function pollCallback(){
    if(xmlHttp.readyState == 4){
      if(xmlHttp.status == 200){
        var message = xmlHttp.responseXML.getElementsByTagName("message")[0].firstChild.data;
        if(message != "done"){
          var new_row = createRow(message);
          var table = document.getElementById("dynamicUpdateArea");
          var table_body = table.getElementsByTagName("tbody").item(0);
          var first_row = table_body.getElementsByTagName("tr").item(1);
          table_body.insertBefore(new_row, first_row);
        }//done
        //5秒后重新查询是否有新的内容
        setTimeout("pollServer()", 5000);
        refreshTime();
      }//200
    }//4
  }

  function createRow(message){
    var row = document.createElement("tr");
    var cell = document.createElement("td");
    var cell_data = document.createTextNode(message);
    cell.appendChild(cell_data);
    row.appendChild(cell);
    return row;
  }

  </script>
</head>
<body>
  <h1>Ajax Dynamic Update Example</h1>

  This Page will automatically update itself:
    <input type="button" value="Launch" id="go" onclick="doStart();"/>
  <p>
  Page will refresh in <span id="time">5</span> seconds.
  </p>

  <table id="dynamicUpdateArea" align="left">
    <tbody>
      <tr id="row"><td></td></tr>
    </tbody>
  </table>

</body>
</html>

后台代码:

package servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/DynamicUpdateServlet")
public class DynamicUpdateServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    private int counter = 1;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("doGet");
        String res = "";
        String task = request.getParameter("task");
        String message = "nothing";

        if(task.equals("reset")){
            counter = 1;
        }else{
            switch (counter) {
            case 1:message = "明月几时有"; break;
            case 2:message = "把酒问青天"; break;
            case 3:message = "不知天上宫阙"; break;
            case 4:message = "我欲乘风归去"; break;
            case 5:message = "又恐琼楼玉宇"; break;
            case 6:message = "高处不胜寒"; break;
            case 7:message = "起舞弄清影"; break;
            case 8:message = "何似在人间"; break;
            default: message="done"; break;
            }
            ++counter;
        }
        res = "<message>"+message+"</message>";
        response.setCharacterEncoding("utf-8");
        response.setContentType("text/xml; charset=utf-8");
        response.setHeader("Cache-Control", "no-cache");
        PrintWriter out = response.getWriter();
        out.println("<response>");
        out.println(res);
        out.println("</response>");
        out.close();
    }
}

时间: 2024-10-17 05:52:51

4.4 创建自动刷新页面的相关文章

Servlet自动刷新页面

以下内容引用自http://wiki.jikexueyuan.com/project/servlet/auto-refresh.html: 假设一个Web页面,显示了现场比赛得分或股票市场状况或货币兑换率.对于所有这些类型的页面,都需要使用浏览器中的Refresh或Reload按钮来定期刷新Web页面. Java Servlet提供一个机制使这项工作变得简单,可以使得Web页面在给定的时间间隔自动刷新. 刷新一个Web页面最简单的方式是使用响应对象的方法setIntHeader().以下是这种方

gulp+browserSync自动刷新页面

BrowserSync "Browsersync能让浏览器实时.快速响应您的文件更改(html.js.css.sass.less等)并自动刷新页面.更重要的是 Browsersync可以同时在PC.平板.手机等设备下进项调试.您可以想象一下:"假设您的桌子上有pc.ipad.iphone.android等设备,同时打开了您需要调试的页面,当您使用browsersync后,您的任何一次代码保存,以上的设备都会同时显示您的改动".无论您是前端还是后端工程师,使用它将提高您30%的

js自动刷新页面代码

<script language="JavaScript">function myrefresh(){window.location.reload();}setTimeout('myrefresh()',1000); //指定1秒刷新一次</script> 页面自动刷新代码大全1) 自动刷新页面 在 <body> 与 </body> 之间加入: <META http-equiv=refresh content=”10;url=../

使用node-livereload自动刷新页面

1. 安装node 2. 安装python 3. 安装connect, serve-static和node-livereload (以下都假设命令行当前目录为e:\WebSite) e:\WebSite>npm install connect e:\WebSite>npm install serve-static e:\WebSite>npm install livereload 如果出现类似:MSB8036: The Windows SDK version 8.1 was not fo

Ajax+php实现自动刷新页面

前端代码: <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title></title> <script type="text/javascript"> var xmlHttp; var count = 1; function createXMLHttpRequest() { if (window.ActiveXObject) { xmlHttp =

如何实现自动刷新页面

如果需要自动刷新一个页面,可以用一个简单的HTML实现. <meta http-equiv="refresh" content="10" /> <title>refresh this page every 10 seconds. close this page to stop.</title> <iframe src="http://www.cnblogs.com/bitzhuwei/p/CSharpGL-an-e

ajax实现自动刷新页面实例

html部分: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>ajax实现自动刷新</title> </head> <body onLoad="Autofresh()"> <p>现在的时间是:<span id="currenttim

点击按钮自动刷新页面

<问题> <button type="button" style="height: 29px; float: left; width: 18%; border: none; border-left: 1px solid #d07878; border-radius: 0 4px 5px 0; padding-top: 3px" onclick="return search()"> 点击上述按钮,页面自动刷新 <原因&

form表单中的button自动刷新页面问题

form表单中如果存在button的话,有可能会出现一个问题:点击button,触发了页面的自动刷新事件. 原因是因为<button>标签默认的类型是submit,即默认的button点击就会触发表单的提交事件. <button></button> <!-- 两者是相当的 --> <button type="sumbit"></button> 解决的办法有三个. 1.在<button>标签中添加属性ty