• Ajax局部刷新例子


    通过本例,可以大概了解AJAX访问服务器的过程以及基本方法,本例结合DOM动态创建表的行

    基本思路:定时间内向服务器请求数据,服务器将返回不同的数据信息(其中以XML格式返回),

    AJAX获取服务器返回的信息后,动态创建表的行,从而形成了动态表的生成。

    实现如下:

    (1)客户端代码:

    <HTML>
    <HEAD>
    <Title>sx.asp</Title>
    <META http-equiv="Content-Type" content="text/html; charset=gb2312">
    <META name="Generator" content="Asp Studio 1.0">
    <script language="javascript">
    var xmlHttp;
    //创建XMLHTTPRequest对象
    function createXMLHttpRequest()
    {
       var xp;
       try{
        if(window.ActiveXObject)
        {
        xp=new ActiveXObject("Microsoft.XMLHTTP");
        }
        else
        {
         xp=new XMLHTTPRequest();
        }
       }
       catch(e)
       {
           alert("err!");
       }
       return xp;
    }
    //启动发送请求
    function doStart()
    {
       xmlHttp=createXMLHttpRequest();
       var url="server/doPost.asp?type=start";
       xmlHttp.open("GET",url,true);
       xmlHttp.onreadystatechange=startCallback;
       xmlHttp.send(null);
    }
    //startCallback方法
    function startCallback()
    {
       if(xmlHttp.readyState==4)
       {
        if(xmlHttp.status==200)
        {
           setTimeout("pollServer()",5000);
          refreshTime();
        }
       }
    }

    //pollServer()方法
    function pollServer()
    {
        xmlHttp=createXMLHttpRequest();
        var url="server/doPost.asp?type=chance";
           xmlHttp.open("GET",url,true);
           xmlHttp.onreadystatechange=pollCallback;
           xmlHttp.send(null);
    }
    //pollCallback方法
    function pollCallback()
    {
      
       if(xmlHttp.readyState==4)
       {
         if(xmlHttp.status==200)
       {
         var xmlDoc=xmlHttp.responseXML;
         var message=xmlDoc.getElementsByTagName("message")[0].firstChild.data;
        if(message!="end")
        {
           var new_row=createRow(message);
          var table=document.getElementById("myTable");
          var table_body=table.getElementsByTagName("tbody").item(0);
          var first_row=table_body.getElementsByTagName("tr").item(0);
          table_body.insertBefore(new_row,first_row);
          setTimeout("pollServer()",5000);
          refreshTime();
        }
       }
       }
    }
    //refreshTime方法
    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 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 onLoad="doStart()">
    <span id="time" style='display=none' >5</span>
    </p>
    <table id="myTable" align="center">
    <tbody>
        <tr id="row_0">
          <td></td>
        </tr>
    </tbody>
    </table>
    </BODY>
    </HTML>

    (2)服务端代码(本例为了测试,所以用ASP,当然PHP、ASP.NET、JSP等都是一个道理)

    <%
    rem 必须设置成"text/xml"
    Response.CharSet="gb2312"
    Response.ContentType="text/xml"
    %>
    <%
    dim types
    dim res
    dim message
    dim counter:counter=1
    if(session("counter")="") then session("counter")=0
    types=replace(Trim(Request.QueryString("type")),"'","")
    counter=session("counter")
    if types="start" then
        counter=1
    end if
    select case counter
       case 1:message="姓名:莫小明,学号:20032564,性别:男,年龄:25岁,籍贯:广西"
       case 2:message="姓名:刘德华,学号:20062564,性别:男,年龄:44岁,籍贯:香港"
       case 3:message="姓名:黎 明,学号:16588587,性别:男,年龄:36岁,籍贯:重庆"
       case 4:message="姓名:张三 5,学号:20062564,性别:女,年龄:29岁,籍贯:重庆"
       case 5:message="姓名:张三 6,学号:20062564,性别:男,年龄:24岁,籍贯:重庆"
       case 6:message="姓名:张三 7,学号:20062564,性别:女,年龄:18岁,籍贯:重庆"
       case 7:message="end"
       case else
             message="end"
    end select
    session("counter")=session("counter")+1
    res="<message>"+message+"</message>"
    Response.Write("<response>"+res+"</response>")
    %>

  • 相关阅读:
    origin 8.5 曲线拟合,延长曲线范围
    赤手空拳编写C#代码
    Vmware 10安装MAC OS X 10.9备忘
    Contest 1445
    Contest 1428
    Contest 1435
    Contest 991
    CSP-SJX2019 解题报告
    【BZOJ4817】【SDOI2017】树点染色
    codeforce 804B Minimum number of steps
  • 原文地址:https://www.cnblogs.com/buffer/p/1713131.html
Copyright © 2020-2023  润新知