• 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;
            }
        });
    }
    
  • 相关阅读:
    document.readyState的使用
    Selenium操作滚动条
    seq2seq模型以及其tensorflow的简化代码实现
    MOXA的Nport5600初始密码
    预测功率和电流之间的关系
    KNN与SVM对比&SVM与逻辑回归的对比
    拉格朗日乘子法以及KKT条件
    复合熵、条件熵和信息增益
    softmax为什么使用指数函数?(最大熵模型的理解)
    极大似然、最小二乘和梯度下降
  • 原文地址:https://www.cnblogs.com/konghui/p/9970135.html
Copyright © 2020-2023  润新知