zoukankan      html  css  js  c++  java
  • AJAX 创建对象 请求 响应 readyState

    AJAX 创建对象 请求 响应 readyState

      AjAX = Asynchronous JavaScript and XML (异步的JavaScrip和 XML).

        不是新的编程语言, 而是一种使用现有标准的新方法.

        最大的优点是在不重新加载整个页面的情况下, 可以与服务器交换数据并更新部分网页内容

        不需要任何浏览器插件,但需要用户允许JavaScript在浏览器上执行.

      应用:

        运用XHML+CSS来表达咨询;

        运用JavaScripct来操作DOM(Documnet Object Model) 来执行动态效果;

        运用XML 和XSLT操作资料;

        运用XMLHttpRequest或新的Fetch API与网页服务器进行异步资料交换;

        AJAX与Flash、Silverlight和Java Applet等RIA技术是有区分的。

    一.XHR(XMLHttpRequest)创建对象

      创建XML对象语法:

    variable=new XMLHttpRequest();
    

       老版本的Internet Explorer (IE5 和 IE6)使用ActiveX对象:

    XMLHttpRequest
    

       为了应对所有的现代浏览器,包括 IE5 和 IE6,请检查浏览器是否支持 XMLHttpRequest 对象。如果支            持,则创建 XMLHttpRequest 对象。如果不支持,则创建 ActiveXObject :

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

     二.XHR请求

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

        open(method,url,async):

        规定请求的类型,URl以及是否异步处理请求

          method: 请求的类型,GET或POST

          url: 文件在服务器的位置

          async: true(异步)或false(异步)

        send(string):

        将请求发送到服务器.

          string: 仅用于POST请求

        1.使用 GET 还是POST?

        与POST相比, GET更简单也更快,并且在大部分情况下都能用,然而,在下面情况下,请使用POST请求.

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

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

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

    一个简单的 GET 请求:
    xmlhttp.open("GET","/try/ajax/demo_get.php",true);
    xmlhttp.send();
    
    
    在上面的例子中,您可能得到的是缓存的结果。
    为了避免这种情况,请向 URL 添加一个唯一的 ID:
    xmlhttp.open("GET","/try/ajax/demo_get.php?t=" + Math.random(),true);
    xmlhttp.send();
    
    
    如果您希望通过 GET 方法发送信息,请向 URL 添加信息:
    xmlhttp.open("GET","/try/ajax/demo_get2.php?fname=Henry&lname=Ford",true);
    xmlhttp.send();
    GET请求
    一个简单POST请求:
    xmlhttp.open("POST","/try/ajax/demo_post.php",true);
    xmlhttp.send();
    
    如果需要像 HTML 表单那样 POST 数据,请使用 setRequestHeader() 来添加 HTTP 头。然后在 send() 方法中规定您希望发送的数据:
    xmlhttp.open("POST","/try/ajax/demo_post2.php",true);
    xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
    xmlhttp.send("fname=Henry&lname=Ford");
    
    
    setRequestHeader(header,value) 
    向请求添加 HTTP 头。
    header: 规定头的名称
    value: 规定头的值
                                        
    POST请求

        2.异步-True 或 False?

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

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

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

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

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

    当使用 async=true 时,请规定在响应处于 onreadystatechange 事件中的就绪状态时执行的函数:
    
    xmlhttp.onreadystatechange=function()
    {
        if (xmlhttp.readyState==4 && xmlhttp.status==200)
        {
            document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
        }
    }
    xmlhttp.open("GET","/try/ajax/ajax_info.txt",true);
    xmlhttp.send();
    Async=true
    我们不推荐使用 async=false,但是对于一些小型的请求,也是可以的。
    
    请记住,JavaScript 会等到服务器响应就绪才继续执行。如果服务器繁忙或缓慢,应用程序会挂起或停止。
    
    注意:当您使用 async=false 时,请不要编写 onreadystatechange 函数 - 把代码放到 send() 语句后面即可:
    
    
    xmlhttp.open("GET","/try/ajax/ajax_info.txt",false);
    xmlhttp.send();
    document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
    Async=false

     三.XHR响应

      1.服务器响应

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

      responseText  获得字符串形式的响应数据

      responXML  获得XML形式的响应数据

      2.responText属性

      如果来自服务器的响应并非XML,请使用respon Text属性

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

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

       3.responseXML属性

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

    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;
    

     四.XHR readyState

      1.onreadystatechange事件

      当请求被发送到服务器时,我们需要执行一些基于响应的任务.

      每当readyState改变时,就会触发 onreadystatechange事件.

      resdyState属性存在有XMLHttpRequest的状态信息.

      

      onreadystatechange:  储存函数(或函数名), 每当readyState属性改变时,就会调用该函数.

      readyState:  存有XMLHttpRequest的状态,从0到4发生改变,

        0: 请求末初初始化

        1: 服务器连接已建立

        2: 请求已接受

        3: 请求处理中

        4: 请求已完成,且响应已就绪

      status:  200: "OK"

           404: 未找到页面

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

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

    xmlhttp.onreadystatechange=function()
    {
        if (xmlhttp.readyState==4 && xmlhttp.status==200)
        {
            document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
        }
    }
    
    回调函数是一种以参数形式传递给另一个函数的函数。
    

       2.使用回调函数  

      回调函数是一种以参数形式传递给另一个函数的函数。

      如果您的网站上存在多个 AJAX 任务,那么您应该为创建 XMLHttpRequest 对象编写一个标准的函数,            并为每个 AJAX 任务调用该函数。

      该函数调用应该包含 URL 以及发生 onreadystatechange 事件时执行的任务(每次调用可能不尽相                    同):

    function myFunction()
    {
        loadXMLDoc("/try/ajax/ajax_info.txt",function()
        {
            if (xmlhttp.readyState==4 && xmlhttp.status==200)
            {
                document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
            }
        });
    }
    
  • 相关阅读:
    剑指Offer-11.二进制中1的个数(C++/Java)
    剑指Offer-10.矩形覆盖(C++/Java)
    剑指Offer-9.变态跳台阶(C++/Java)
    UVA 1608 Non-boring sequence 不无聊的序列(分治,中途相遇)
    UVA1607 Gates 与非门电路 (二分)
    UVA 1451 Average平均值 (数形结合,斜率优化)
    UVA 1471 Defense Lines 防线 (LIS变形)
    UVA 1606 Amphiphilic Carbon Molecules 两亲性分子 (极角排序或叉积,扫描法)
    UVA 11134 FabledRooks 传说中的车 (问题分解)
    UVA 1152 4 Values Whose Sum is Zero 和为0的4个值 (中途相遇)
  • 原文地址:https://www.cnblogs.com/konghui/p/9970135.html
Copyright © 2011-2022 走看看