zoukankan      html  css  js  c++  java
  • Ajax之路

    第一部分:

    Ajax全称Asynchronous Javascript and XML,中文意思为“异步的Javascript 和XML”。
    Ajax这组技术是web2.0的核心之一。

      Ajax不是一项技术,它是多种技术组合而成:

    1. 运用XHTML和CSS实现基于各种标准的展示。
    2. 运用文档对象模型(Document Object Model,DOM)实现动态显示和交互。
    3. 运用XML和XSLT实现数据交换和操作
    4. 运用XMLHttpRequest(Ajax核心,简称XHR对象)实现异步数据检索
    5. JavaScript将所有这些绑定到一起。
      Ajax:使用ajax技术不用刷新整个页面,只需对局部页面进行刷新。也就是说用XHR对象取得新数据,然后通过DOM方式将新数据插入到页面中,达到局部更新的效果。

      Ajax优点:

    减少冗余请求,节省网络带宽,提高网页加载效率,从而缩短用户等待时间,促进页面与数据分离,提高用户体验

      Ajax缺点:

    • Ajax干掉了浏览器后退机制(back按钮);
    • 特定页面很难加入收藏夹;
    • Ajax采用javascript和XHR,这些取决于浏览器的支持,同时存在兼容性问题;
    • 一些流媒体和手机设备支持的不太良好

     

    第二部分:

      1.创建XMLHttpRequest对象:

     1 var xhr=null;
     2 if (window.XMLHttpRequest) {
     3     //IE7+,Firefox,chrome,Opera,Safari等现代浏览器执行代码
     4     xhr=new XMLHttpRequest();
     5 }else{
     6     //IE6,IE5浏览器执行代码
     7     xhr=new ActiveXObject("Microsoft.XMlHTTP");
     8 }
     9 
    10 /*  第二种方法
    11 xhr=window.XMLHttpRequest ? new XMLHttpRequest() :new ActiveXObject("Microsoft.XMLHTTP");
    12 */
    13 
    14 /*  第三种方法:
    15 try{
    16     xhr=XMLHttpRequest();
    17 }catch(e){
    18     xhr=ActiveXObject("Microsoft.XMLHTTP");
    19 }
    20 */

      2.向服务器发送请求:

    xhr.open(method,url,async);

      规定请求的类型、url、是否是异步处理请求;
      method:GET或者POST,url:文件在服务器上位置,async:true为异步(默认),false为同步

    同步和异步
    同步:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式。
    异步:发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式

      ps:不推荐使用async=false,因为这样JavaScript会等到服务器响应就绪才继续进行,如果服务器繁忙或缓慢,那么应用程序会挂起或停止。

    xhr.send(string)
    将请求发送到服务器;string:仅用于POST请求

      GET还是POST?

      大部分情况下,都能使用GET,并且相比POST更快更简单

      但是,POST运用在以下场景:

      • 使用缓存文件(更新服务器上文件或数据库)
      • 向服务器发送大量数据(POST没有数据限制,GET请求URL限制长度为2048字符)
      • 安全性操作

       如果要通过GET方法来发送信息,需在URL中添加信息:

      

    xhr.open("GET","index.php?name=a&age=b",true);
    xhr.send();
    

      如果要像html表单那样POST数据,需使用setRequestHeader(Header,value)来添加HTTP头进行模拟。然后在send()发送你想要发送的数据:

    xhr.open("POST","index.php",true);
    xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");
    xhr.send("name=a&age=b");
    

      

      3.服务器(XHR)响应:

      XMLHttpReques对象有responseTextresponseXML属性。

        服务器响应不是XML,使用responseText属性,以字符串形式返回:

    document.getElementById("test").innerHtml=xhr.responseText;
    

        服务器响应是XML,使用responseXML属性:

    xmlDoc=xhr.responseXML;
    txt="";
    x=xmlDoc.getElementsByTagName("test1");
    for (i=0;i<x.length;i++)
    {
        txt=txt + x[i].childNodes[0].nodeValue + "<br>";
    }
    document.getElementById("myDiv").innerHTML=txt;
    

      XMLHttpRequest对象还有readyStatestatus属性:

      每当readyState属性改变时,就会触发onreadyStateChange事件

      readyState:表示XMLHttpRequest的状态(0,1,2,3,4):  

      • 0:请求未初始化;
      • 1:服务器连接已建立;
      • 2:请求已接收;
      • 3:请求处理中;
      • 4:请求已完成,响应已就绪

      status: 常见200(“OK”),404(未找到页面)

    1 xhr.onreadystatechange=function(){
    2     if (xhr.readyState==4 && status==200) {
    3         document.getElementById("test").innerHtml=xhr.responseText;
    4     }
    5 }

       示例:

     1 <!DOCTYPE html>
     2 <html>
     3 <head>
     4     <title>hello</title>
     5     <meta charset="utf-8">
     6 </head>
     7 <body>
     8     <script type="text/javascript">
     9         function fix(){
    10             var xhr=null;
    11             if (window.XMLHttpRequest) {
    12                 xhr=new XMLHttpRequest();
    13             }else{
    14                 xhr= new ActiveXObject("Microsoft.XMLHTTP");
    15             }
    16             xhr.onreadystatechange=function(){
    17                 if(xhr.readyState==4 && xhr.status==200){
    18                     document.getElementById('test').innerHTML=xhr.responseText;
    19                 }
    20             }
    21             xhr.open("GET",'test.txt',true);
    22             xhr.send(); 
    23         }
    24 
    25     </script>
    26     <div id="test">修改内容</div>
    27     <button type="button" onclick="javascript:fix()">点击进行修改</button>
    28 </body>
    29 </html>

        ps:这里我将文件1.html和test.txt放置在Xampp下的htdocs目录下,运行xampp control-》开启服务器。

      http://localhost/1.html运行代码,得到以下结果:(Status:200;Type:xhr):

  • 相关阅读:
    《哈佛大学公开课:公正该如何做是好?》学习笔记3
    iPhone客户端开发笔记(三)
    iPhone客户端开发笔记(一)
    今天讨论了下本地化服务信息应用
    云游第一天感受
    昨晚调试一段PHP程序时遇到的三个问题
    iPhone客户端开发笔记(四)
    《哈佛大学公开课:公正该如何做是好?》学习笔记2
    Oracle10g数据库归档与非归档模式下的备份与恢复
    javascript 实现页面间传值
  • 原文地址:https://www.cnblogs.com/why-not-try/p/7822754.html
Copyright © 2011-2022 走看看