zoukankan      html  css  js  c++  java
  • Ajax简单介绍和使用步骤

    Ajax被认为是(Asynchronous(异步) JavaScript And Xml的缩写)。现在,允许浏览器与服务器通信而无须刷新当前页面的技术都被叫做Ajax.
    同步是指:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式。  
    异步是指:发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式 。
    通常不用刷新网页而与服务器通讯的方法:
    • Flash
    • 框架Frameset:如果使用一组框架构造了一个网页,可以只更新其中一个框架,而不必惊动整个页面
    • XMLHttpRequest:该对象是对 JavaScript 的一个扩展,可使网页与服务器进行通信。是创建 Ajax 应用的最佳选择。实际上通常把 Ajax 当成XMLHttpRequest(XHR) 对象的代名词

    1,Ajax的工作原理

    • AJAX采用异步交互过程。AJAX在用户与服务器之间引入一个中间媒介,从而消除了网络交互过程中的处理—等待—处理—等待缺点。

    • 用户的浏览器在执行任务时即装载了AJAX引擎。AJAX引擎用JavaScript语言编写,通常藏在一个隐藏的框架中。它负责编译用户界面及与服务器之间的交互。

    • AJAX引擎允许用户与应用软件之间的交互过程异步进行,独立于用户与网络服务器间的交流。现在,可以用javascript调用AJAX引擎来代替产生一个HTTP的用户动作,内存中的数据编辑、页面导航、数据校验这些不需要重新载入整个页面的需求可以交给AJAX来执行。

    2,AJAX的缺陷

    • AJAX大量使用了JavaScript和AJAX引擎,而这个取决于浏览器的支持。IE5.0及以上、Mozilla1.0、NetScape7及以上版本才支持,Mozilla虽然也支持AJAX,但是提供XMLHttpRequest的方式不一样。所以,使用AJAX的程序必须测试针对各个浏览器的兼容性。
    • AJAX更新页面内容的时候并没有刷新整个页面,因此,网页的后退功能是失效的;有的用户还经常搞不清楚现在的数据是旧的还是已经更新过的。这个就需要在明显位置提醒用户“数据已更新”。
    • 对流媒体的支持没有FLASH好。
    • 一些手持设备(如手机、PDA等)现在还不能很好的支持Ajax。

    3,创建AJAX引擎对象的两种不同方式

    第一种:

    [javascript] view plain copy
     
    1. function createXHR(){  
    2.         var xhr =null;  
    3.         try{  
    4.             xhr = new ActiveXObject("microsoft.xmlhttp");  
    5.         }catch (e) {  
    6.             try{  
    7.                 xhr = new XMLHttpRequest();  
    8.             }catch(e){  
    9.                 alert("浏览器太差了,敢接卸载了吧");  
    10.             }  
    11.     }  
    12.     return xhr;  
    13.  }    


    第二种:

    [javascript] view plain copy
     
    1. function createXHR(){  
    2.         var xhr=null;  
    3.         if(window.ActiveXObject){  
    4.             xhr= new ActiveXObject("microsoft.xmlhttp");  
    5.         }else{  
    6.             xhr = new XMLHttpRequest();  
    7.         }  
    8.         return xhr;  
    9.     }  


    4,使用AJAX

    核心函数:当出发js事件时出发的函数

    [javascript] view plain copy
     
    1. function checkValue(){  
    2.             //创建ajax引擎对象  
    3.             var xhr = createXHR();  
    4.             //用于存储返回信息  
    5.             var msg="";  
    6.             //创建ajax状态监听  
    7.             xhr.onreadystatechange=function(){  
    8.                 if(xhr.readyState==4){  
    9.                     if(xhr.status==200){  
    10.                         //接受返回字符串  
    11.                         msg = xhr.responseText;  
    12.                         //使用返回的字符串信息  
    13.                         document.getElementById("result").innerHTML=msg;  
    14.                     }  
    15.                 }  
    16.             };  
    17.             var username = document.getElementsByName("username")[0].value;  
    18.             //准备以POST方式发送请求  
    19.             xhr.open("post","/day31/CheckServlet?time="+new Date().getTime());  
    20.             //设置请求头,只有是POST方式下,才设置该请求头  
    21.             xhr.setRequestHeader("content-type","application/x-www-form-urlencoded");  
    22.             //设置为 post时,就可以在send函数中添加参数列表。当为get时,下面的send中参数为null。  
    23.             xhr.send("username="+username);  
    24.         }  


    在url中添加time参数 是因为在某些情况下,有些浏览器会把多个XMLHttpRequest请求的结果缓存在同一个URL。如果对每个请求的响应不同,这就会带来不好的结果。把当前时间戳追加到URL的最后,就能确保URL的惟一性,从而避免浏览器缓存结果 onreadystatechange:状态改变的事件触发器。

    readyState:对象状态  

    0:未初始化

    1:读取中

    2:已读取

    3:交互中

    4:完成

    responseText:返回的文本版本

    responseXML:返回数据的兼容DOM的XML文档对象

    status:服务器返回的状态码:如:404:文件未找到、200:成功

    使用XMLHttpRequest实例与服务器交互的的3个关键部分:

    • onreadystatechange 事件处理函数 :

    该事件是由服务器触发的,而不是用户。在执行ajax的过程中,服务器同志当前客户端的通讯状态,(即改变XMLHttpRequest对象的readState来实现)。服务端每次改变客户端的通讯状态都会触发onreadystatechange事件。

    • open(method, url, asynch)
    前台通过XMLHttpRequest对象的open方法向服务器端发送请求。
    method:请求类型,类似“GET”或”POST”的字符串。若只想从服务器检索一个文件,而不需要发送任何数据,使用GET(可以在GET请求里通过附加在URL上的查询字符串来发送数据,不过数据大小限制为2000个字符)。若需要向服务器发送数据,用POST。
    url:路径字符串,指向你所请求的服务器上的那个文件。可以是绝对路径或相对路径。
    asynch:表示请求是否要异步传输,默认值为true(异步)。指定true,在读取后面的脚本之前,不需要等待服务器的相应。指定false,当脚本处理过程经过这点时,会停下来,一直等到Ajax请求执行完毕再继续执行。
    • send(data)
    •open 方法定义了 Ajax 请求的一些细节。send 方法可为已经待命的请求发送指令
    •data:将要传递给服务器的字符串。
    •若选用的是 GET 请求,则不会发送任何数据,给 send 方法传递 null 即可:request.send(null);
    •当向send()方法提供参数时,要确保open()中指定的方法是POST,如果没有数据作为请求体的一部分发送,则使用null.

    5,Ajax的服务端程序

    在ajax的服务端主要使用:  response.getWriter().write(msg);来返回ajax的返回信息。

    但是在执行该函数之前必须要指定返回的是什么类型的信息:

    1,resp.setContentType("text/html;charset=utf-8"); 说明返回的是文本文件

    2,response.setContentType("text/xml;charset=utf-8");说明返回的是xml文件

     

    如何使用ajax?

    第一步,创建xmlhttprequest对象,var xmlhttp =new XMLHttpRequest();XMLHttpRequest对象用来和服务器交换数据。

    1
    2
    3
    4
    5
    6
    7
    8
    var xhttp;
    if (window.XMLHttpRequest) {
    //现代主流浏览器
    xhttp = new XMLHttpRequest();
    } else {
    // 针对浏览器,比如IE5或IE6
    xhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }

    第二步,使用xmlhttprequest对象的open()和send()方法发送资源请求给服务器。

    xmlhttp.open(method,url,async) method包括get 和post,url主要是文件或资源的路径,async参数为true(代表异步)或者false(代表同步)

    xhttp.send();使用get方法发送请求到服务器。

    xhttp.send(string);使用post方法发送请求到服务器。

    post 发送请求什么时候能够使用呢?

    (1)更新一个文件或者数据库的时候。

    (2)发送大量数据到服务器,因为post请求没有字符限制。

    (3)发送用户输入的加密数据。

    get例子:

    1
    2
    3
    xhttp.open("GET", "ajax_info.txt", true);
    xhttp.open("GET", "index.html", true);
    xhttp.open("GET", "demo_get.asp?t=" + Math.random(), true);xhttp.send();

    post例子

    1
    2
    xhttp.open("POST", "demo_post.asp", true);
    xhttp.send();

    post表单数据需要使用xmlhttprequest对象的setRequestHeader方法增加一个HTTP头。

    post表单例子

    1
    2
    3
    xhttp.open("POST", "ajax_test.aspx", true);
    xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    xhttp.send("fname=Henry&lname=Ford");

    async=true 当服务器准备响应时将执行onreadystatechange函数。

    1
    2
    3
    4
    5
    6
    7
    xhttp.onreadystatechange = function() {
    if (xhttp.readyState == 4 && xhttp.status == 200) {
    document.getElementById("demo").innerHTML = xhttp.responseText;
    }
    };
    xhttp.open("GET", "index.aspx", true);
    xhttp.send();

    asyn=false 则将不需要写onreadystatechange函数,直接在send后面写上执行代码。

    1
    2
    3
    xhttp.open("GET", "index.aspx", false);
    xhttp.send();
    document.getElementById("demo").innerHTML = xhttp.responseText;

    第三步,使用xmlhttprequest对象的responseText或responseXML属性获得服务器的响应。

    使用responseText属性得到服务器响应的字符串数据,使用responseXML属性得到服务器响应的XML数据。

    例子如下:

    1
    document.getElementById("demo").innerHTML = xhttp.responseText;

    服务器响应的XML数据需要使用XML对象进行转换。

    例子:

    1
    2
    3
    4
    5
    6
    7
    xmlDoc = xhttp.responseXML;
    txt = "";
    x = xmlDoc.getElementsByTagName("ARTIST");
    for (i = 0; i < x.length; i++) {
    txt += x[i].childNodes[0].nodeValue + "<br>";
    }
    document.getElementById("demo").innerHTML = txt;

    第四步,onreadystatechange函数,当发送请求到服务器,我们想要服务器响应执行一些功能就需要使用onreadystatechange函数,每次xmlhttprequest对象的readyState发生改变都会触发onreadystatechange函数。

    onreadystatechange属性存储一个当readyState发生改变时自动被调用的函数。

    readyState属性,XMLHttpRequest对象的状态,改变从0到4,0代表请求未被初始化,1代表服务器连接成功,2请求被服务器接收,3处理请求,4请求完成并且响应准备。
    status属性,200表示成功响应,404表示页面不存在。

    在onreadystatechange事件中,服务器响应准备的时候发生,当readyState==4和status==200的时候服务器响应准备。

    例子:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    function loadDoc() {
    var xhttp = new XMLHttpRequest();
    xhttp.onreadystatechange = function() {
    if (xhttp.readyState == 4 && xhttp.status == 200) {
    document.getElementById("demo").innerHTML = xhttp.responseText;
    }
    };
    xhttp.open("GET", "ajax_info.txt", true);
    xhttp.send();
    }
    //函数作为参数调用
    <!DOCTYPE html>
    <html>
    <body>
    <p id="demo">Let AJAX change this text.</p>
    <button type="button"
    onclick="loadDoc('index.aspx', myFunction)">Change Content
    </button>
    <script>
    function loadDoc(url, cfunc) {
    var xhttp;
    xhttp=new XMLHttpRequest();
    xhttp.onreadystatechange = function() {
    if (xhttp.readyState == 4 && xhttp.status == 200) {
    cfunc(xhttp);
    }
    };
    xhttp.open("GET", url, true);
    xhttp.send();
    }
    function myFunction(xhttp) {
    document.getElementById("demo").innerHTML = xhttp.responseText;
    }
    </script>
    </body>
    </html>

    以上所述是小编给大家介绍的Ajax的使用四大步骤,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

    原文链接:http://www.cnblogs.com/Hackerman/p/5648389.html?utm_source=tuicool&utm_medium=referral

  • 相关阅读:
    简单两行,实现无线WiFi共享上网,手机抓包再也不用愁了
    Windows下Python 3.6 安装BeautifulSoup库
    RSA加密算法破解及原理
    干货,Wireshark使用技巧-过滤规则
    干货:Wireshark使用技巧-显示规则
    干货!链家二手房数据抓取及内容解析要点
    Wireshark分析实战:某达速递登录帐号密码提取
    协议分析中的TCP/IP网络协议
    Wireshark使用教程:不同报文颜色的含义
    VMware kali虚拟机环境配置
  • 原文地址:https://www.cnblogs.com/tengqiuyu/p/7411157.html
Copyright © 2011-2022 走看看