Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 310|回复: 0

[AJAX学习]揭开AJAX神秘面纱

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-10-12 23:48:21 | 显示全部楼层 |阅读模式
    AJAX,即"Asynchronous javaScript And XML"的缩写,可翻译为异步JavaScript及XML技术。其核心是一个寄宿在浏览器中名为XMLHTTPRequest的类。通过此类,可以做到无需提交表单就可以实现与服务器的连接;无需刷新整个页面,就可以动态更新页面中一部分的内容。XMLHTTPRequest通常使用XML作为数据交换的载体,但也可使用其他的载体,如纯文本。简单来说,就是通过XMLHTTPRequest发送信息给服务器,异步接收服务器处理并返回信息,然后通过JavaScript动态更新页面的部分内容。  尽管AJAX近来非常火爆,但AJAX并非新的技术,正如其名所示,只不过是JavaScript加上XML的技术罢了。而且使用上非常简单。  应用AJAX的流程:

      
      


      1、定义一个事件处理器  
      2、获取XMLHTTPRequest,并将事件处理器注册给它  
      3、与服务器连接  
      4、发送信息  
      5、服务器返回处理完毕的信息  
      6、每当XMLHTTPRequest的状态发生变化,自动触发事件处理器  
      7、事件处理器动态更新页面
      本文通过一个简单的例子来说明如何在IE6中使用AJAX技术。在这例子中,客户端每隔十秒,从服务器端取回一个随机的字符串,在不重新刷新页情况下,自动更新部分页面内容。例子仅用到了两个jsp文件,client.jsp及server.jsp。为了方便说明,我用server.jsp来代替本应作为Servlet的Server.java。  先看client.jsp内容:  

      
       
        <%@page contentType="text/HTML"%>
    <%@page pageEncoding="gb2312"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
        "http://www.w3.org/TR/html4/loose.dtd"> <html>
         <head>
             <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
             <title>AJAX Demo</title>
             <script language="JavaScript">
                 var xmlHttp;
                
                 function getGiftFromServer() {
                     var url = "http://localhost:8084/ajax/server.jsp";
                     if (window.ActiveXObject) {
                         xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
                     }                 xmlHttp.onreadystatechange = showGift;                 xmlHttp.open("GET", url, true);
                     xmlHttp.send(null);
                     
                     setTimeout("getGiftFromServer()",10000);
                 }             function showGift() {
                     if (xmlHttp.readyState == 4 || xmlHttp.readyState == "complete") {
                         document.getElementById("output").innerHTML = "Time is for " + xmlHttp.responseText + ".";
                     }
                 }
             </script>
         </head>
         <body onload="getGiftFromServer()">         <h1>AJAX例子</h1>         <div id="output"></div>
         </body>
    </html>
       
      
      加载页面时,将调用JavaScript的getGiftFromServer()函数,此函数完成了上面所提的应用AJAX的流程中第1至第4步,同时设定了一个每隔十秒自动调用此函数的定时器。而showGift()函数完成所提流程中的第5至第7步。下面详细说明每一步骤。


      1、定义事件处理器,此处理器将在服务器端返回数据时自动被触发执行。  

      
       
           function showGift() {
             if (xmlHttp.readyState == 4 || xmlHttp.readyState == "complete") {
                 document.getElementById("output").innerHTML = "Time is for " + xmlHttp.responseText + ".";
             }
         }
       
      
       因为我们这里使用异步,readyState属性用来判断服务器返回信息的状态。其值是一个从0至4的整数,对应于:

      0:对象已创建,但未初始化(未调用open()方法)
      1:对象已创建,但未调用send()方法
      2:已调用send()方法,但status及headers还未可用
      3:已经传回部分数据,但status及headers还未完全可用
      4:已经收到所有数据,可使用所有数据
      2、获取XMLHTTPRequest,并将事件处理器注册给它  注意:要使用XMLHTTPRequest,需要IE5.0以上的版本。  2.1 取得XMLHTTPRequest  在IE7.0之前获得XMLHTTPRequest,使用如下代码:  

      
       
          if (window.ActiveXObject) {
             xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
         }
       
      
       而在IE7.0中:  

      
       
           if (window.XMLHttpRequest) {
            xmlHttp = new XMLHttpRequest
         }
       
      
       2.2 注册事件处理器  

      
       
        xmlHttp.onreadystatechange = showGift;
       
      
       showGift为传入的方法名,每当XMLHTTPRequest的状态发生改变时,将执行此方法  3. 与服务器连接并发送  

      
       
        xmlHttp.open("GET", url , true)
       
      
       其方法签名如下:  

      
       
        xmlHttp.open(bstrMethod, bstrUrl, varAsync, bstrUser, bstrPassword)
       
      
       其中:

      bstrMethod: 连接方式,可用的有GET, POST, PUT, or PROPFIND
      bstrUrl: 服务器的url
      varAsync(可选): 调用是否异步,默认为true(调用立即返回)
      bstrUser(可选):用户名,如果url需要验证时附上
      bstrPassword(可选):密码,如果url需要验证时附上  
      open()方法可以直接打开一个xml文档,并通过xmlHttp的responseXML来读取相应的节点。如下例:  

      
       
             xmlHttp.open("GET","http://localhost/books.xml", false);
           xmlHttp.send();
           var book = xmlhttp.responseXML.selectSingleNode("//book[@id="bk101"]");
       
      
       4、发送信息  

      
       
        xmlHttp.send(null)
       
      
       其方法签名如下:  

      
       
        xmlHttp.send( [varBody])
       
      
       varBody(可选): 可为字符串或xml等数据,可以为null。无返回值  此方法在open()设为异步时,立即返回;在open()设为同步时,必须等到reponse对象从服务器中返回时才返回。  5、服务器返回处理完毕的信息  此时,该是服务器端工作了,server.jsp的代码如下:

      
       
         <% response.setHeader("Cache-Control","no-cache");%>
    <% response.setHeader("Pragma","no-cache");%>
    <% response.setDateHeader ("Expires",-1); %>  
    <%
         String[] str = new String[] {"Love", "Power", "Peace"};
         int number = new java.util.Random().nextInt(2+1);
         response.getWriter().write(str[number]);
    %>
       
      
       从三个字符串中随机挑选一个写入到response中,返回客户端。  6、客户端自动探知XMLHTTPRequest的状态已经发生变化,自动触发事件处理器  7、事件处理器动态更新页面  处理器读取xmlHttp.responseText的值,并通过JavaScript动态更新的内容。  

      
      
      
       
       
         document.getElementById("output").innerHTML = "Time is for " + xmlHttp.responseText + ".";
       
       
      
      
      结语:
      由上7步可见,AJAX并不复杂,远比想像中要简单得多。牢牢记住这一点,“AJAX让我们在不用刷新页面的情况下,可以动态地更新网页部分内容”,然后运用到各种需要用到这种性能的场合,将使我们的网页更有创意。
    版权声明:Techtarget获Matrix授权发布,如需转载请联系Matrix
    作者:Sarkuya  blog:http://blog.matrix.org.cn/page/Sarkuya
    原文地址:http://www.matrix.org.cn/resource/article/44/44335_AJAX.html


      
      
       
       

         
       

         
       
      
      

    源码下载:http://file.javaxxz.com/2014/10/12/234821453.zip
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-5-23 01:13 , Processed in 0.436555 second(s), 50 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表