zoukankan      html  css  js  c++  java
  • AJAX学习

    1. AJAX的定义

    AJAX = 异步 JavaScript 和 XML。

    AJAX 是一种用于创建快速动态网页的技术。

    通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。

    传统的网页(不使用 AJAX)如果需要更新内容,必需重载整个网页面。

    有很多使用 AJAX 的应用程序案例:新浪微博、Google 地图、开心网等等。

    2. AJAX工作原理

    3. AJAX的四个步骤:

    (1)创建XMLHttpRequest对象

    var xmlhttp;
    if (window.XMLHttpRequest)
    {
        //  IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码
        xmlhttp=new XMLHttpRequest();
    }
    else
    {
        // IE6, IE5 浏览器执行代码
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }

    (2)向服务器发送请求

    xmlhttp.open("GET","ajax_info.txt",true);
    xmlhttp.send();

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

    然而,在以下情况中,请使用 POST 请求:

        无法使用缓存文件(更新服务器上的文件或数据库);

        向服务器发送大量数据(POST 没有数据量限制;

        发送包含未知字符的用户输入时,POST 比 GET 更稳定也更可靠;

     

    AJAX 指的是异步 JavaScript 和 XML(Asynchronous JavaScript and XML)。

    XMLHttpRequest 对象如果要用于 AJAX 的话,其 open() 方法的 async 参数必须设置为 true:

    通过 AJAX,JavaScript 无需等待服务器的响应,而是:

        在等待服务器响应时执行其他脚本;

        当响应就绪后对响应进行处理;

    (3)服务器响应

    如需获得来自服务器的响应,请使用 XMLHttpRequest 对象的 responseText 或 responseXML 属性。

    responseText 属性返回字符串形式的响应,因此您可以这样使用:

    实例

    document.getElementById("myDiv").innerHTML=xmlhttp.responseText;

    如果来自服务器的响应是 XML,而且需要作为 XML 对象进行解析,请使用 responseXML 属性:

    实例

    请求 cd_catalog.xml 文件,并解析响应:

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

    (4)AJAX onreadystatechange事件

    在 onreadystatechange 事件中,我们规定当服务器响应已做好被处理的准备时所执行的任务。

    当 readyState 等于 4 且状态为 200 时,表示响应已就绪:

    实例

    xmlhttp.onreadystatechange=function()   {   if (xmlhttp.readyState==4 && xmlhttp.status==200)     {     document.getElementById("myDiv").innerHTML=xmlhttp.responseText;     }   }

     (4)实例

    用AJAX从数据库返回数据

     1 function showCustomer(str)
     2 {
     3   var xmlhttp;    
     4   if (str=="")
     5   {
     6     document.getElementById("txtHint").innerHTML="";
     7     return;
     8   }
     9   if (window.XMLHttpRequest)
    10   {
    11     // IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码
    12     xmlhttp=new XMLHttpRequest();
    13   }
    14   else
    15   {
    16     // IE6, IE5 浏览器执行代码
    17     xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    18   }
    19   xmlhttp.onreadystatechange=function()
    20   {
    21     if (xmlhttp.readyState==4 && xmlhttp.status==200)
    22     {
    23       document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
    24     }
    25   }
    26   xmlhttp.open("GET","/try/ajax/getcustomer.php?q="+str,true);
    27   xmlhttp.send();
    28 }
    29 </script>
    30 </head>
    31 <body>
    32 
    33 <form action=""> 
    34 <select name="customers" onchange="showCustomer(this.value)" style="font-family:Verdana, Arial, Helvetica, sans-serif;">
    35 <option value="APPLE">Apple Computer, Inc.</option>
    36 <option value="BAIDU ">BAIDU, Inc</option>
    37 <option value="Canon">Canon USA, Inc.</option>
    38 <option value="Google">Google, Inc.</option>
    39 <option value="Nokia">Nokia Corporation</option>
    40 <option value="SONY">Sony Corporation of America</option>
    41 </select>
    42 </form>
    43 <br>
    44 <div id="txtHint">客户信息将显示在这...</div>
    45 
    46 </body>
    47 </html>
    View Code

    用AJAX从XML 文件返回数据

     1 <!DOCTYPE html>
     2 <html>
     3 <head>
     4 <meta charset="utf-8">
     5 <style>
     6 table,th,td {
     7   border : 1px solid black;
     8   border-collapse: collapse;
     9 }
    10 th,td {
    11   padding: 5px;
    12 }
    13 </style>
    14 </head>
    15 <body>
    16 
    17 <h1>XMLHttpRequest 对象</h1>
    18 
    19 <button type="button" onclick="loadDoc()">获取我收藏的 CD</button>
    20 <br><br>
    21 <table id="demo"></table>
    22 
    23 <script>
    24 function loadDoc() {
    25   var xhttp = new XMLHttpRequest();
    26   xhttp.onreadystatechange = function() {
    27     if (this.readyState == 4 && this.status == 200) {
    28       myFunction(this);
    29     }
    30   };
    31   xhttp.open("GET", "cd_catalog.xml", true);
    32   xhttp.send();
    33 }
    34 function myFunction(xml) {
    35   var i;
    36   var xmlDoc = xml.responseXML;
    37   var table="<tr><th>Artist</th><th>Title</th></tr>";
    38   var x = xmlDoc.getElementsByTagName("CD");
    39   for (i = 0; i <x.length; i++) {
    40     table += "<tr><td>" +
    41     x[i].getElementsByTagName("ARTIST")[0].childNodes[0].nodeValue +
    42     "</td><td>" +
    43     x[i].getElementsByTagName("TITLE")[0].childNodes[0].nodeValue +
    44     "</td></tr>";
    45   }
    46   document.getElementById("demo").innerHTML = table;
    47 }
    48 </script>
    49 
    50 </body>
    51 </html>
    View Code

    用callback函数的AJAX实例

     1 if (window.XMLHttpRequest)
     2   {// IE7+, Firefox, Chrome, Opera, Safari 代码
     3   xmlhttp=new XMLHttpRequest();
     4   }
     5 else
     6   {// IE6, IE5 代码
     7   xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
     8   }
     9 xmlhttp.onreadystatechange=cfunc;
    10 xmlhttp.open("GET",url,true);
    11 xmlhttp.send();
    12 }
    13 function myFunction()
    14 {
    15     loadXMLDoc("/try/ajax/ajax_info.txt",function()
    16     {
    17         if (xmlhttp.readyState==4 && xmlhttp.status==200)
    18         {
    19             document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
    20         }
    21     });
    22 }
    23 </script>
    24 </head>
    25 <body>
    26 
    27 <div id="myDiv"><h2>使用 AJAX 修改文本内容</h2></div>
    28 <button type="button" onclick="myFunction()">修改内容</button>
    29 
    30 </body>
    31 </html>
    View Code
  • 相关阅读:
    foreach next 操作数组指针移动问题,多个数连加,连除,连减,连乘php版本
    mysql 5.7 laravel json类型数据相关操作
    rbac权限控制,基于无线分类
    基于bootstrap-treeview做的一个漂亮的无限分类树层级联动菜单
    css页面字体替换源代码和页面显示不一样问题解决
    centos6.8 编译安装lnmp php7.2 mysql5.6 nginx1.1.4
    mysql5.7采坑
    laravel整合vue 多入口解决
    使用mysql设计一个全局订单生产计数器
    laravel整合workerman做聊天室
  • 原文地址:https://www.cnblogs.com/changna1314/p/6867027.html
Copyright © 2011-2022 走看看