Ajax学习

96 阅读1分钟

Ajax (异步的 JavaScript 和 XML)

1. Ajax Introduce

  • 一种用于创建快速动态网页的技术。通过在后台与服务器进行少量数据交换, 可以使网页实现异步更新
  • 基于 XMLHttpRequest() 对象
  • 运用 XHTML+CSS 来表达资讯
  • 运用 JavaScript 操作 DOM(Document Object Model)来执行动态效果;
  • 运用 XML 和 XSLT 操作资料;
  • 运用 XMLHttpRequest 或新的 Fetch API 与网页服务器进行异步资料交换;
  • 局部动态更新
  • 注意: AJAX 与 Flash、Silverlight 和 Java Applet 等 RIA 技术是有区分的 实例:从Cnode社区请求数据
    <script>
            //实例对象
            var xmlhttp = new XMLHttpRequest();
            
            //异步回调,成功更新dom
            xmlhttp.onreadystatechange => (){
                if(xmlhttp.status == 200 && xmlreadystate = 4)
                {
                    document.getElementById("ID").innerHTML = xmlhttp.responseText;   
                }
            }
            
            //初始化参数, (方法, url, 同/异步请求)
            xmlhttp.open('get','https://cnode.org/api/v1/topics',true);
            
            //发送,应用post方法时,send()带参数
            xml.send();
    </script>

2. get 与 post 请求

  • get 传送数据少,受URL限制,且不安全,form提交数据集须为ascii,但执行效率高
  • post 传送多,数据传送放在请求体中,较安全,支持整个ISO10646字符集

实例:简单的数据提交请求

    ... //与get相同
    
    /*  header: 规定头的名称  value: 规定头的值 */
    xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
  
    xmlhttp.send("fname=Henry&lname=Ford");

3. XHR 响应

  • responseText 获得字符串形式的响应数据
  • responseXML 获得 XML 形式的响应数据 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. onreadystatechange 回调

5. 小结

    /* 实例化 */
    var xmlhttp = new XMLHttpRequest()
    
    /* hook */
    xmlhttp.onreadystate =>(){
        if(xmlhttp.status == 4 && xmlhttp.readystate == 200)
            document.getElementById('ID').innerHTML = xmlhttp.responseText;
    }
    
    /* get */
    xmlhttp.open('get','url',ture)
    
    xmlhttp.send()    
    
    /* post */
    xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
  
    xmlhttp.send("fname=Henry&lname=Ford");