zoukankan      html  css  js  c++  java
  • js-ajax相关基础知识整理

    ajax的核心是xmr对象,要调用的第一个方法是open(),他接受3个参数:要发送的请求类型("get","post")、请求的URL和表示是否异步发送请求的布尔值。

    xhr("get",url,false);

    调用open()方法并不会真正发送请求,而是启动一个请求已备发送,要发送特定请求,必须像下面这样调用send()方法

    xhr.send(null);这个null对于某些浏览器是必须的。调用send()方法后,请求就会被分派到服务器。在收到响应后,响应的数据会自动填充xhr对象那个的属性,相关属性如下:

    responseText:作为响应主体被返回的文本。

    responseXML:如果响应的内容类型是:"text/html"或"application/xml",这个属性中将保存包含响应数据的xmldom文档。

    status:响应的http状态(200表示成功,304表示请求的资源并没有修改 ,可以直接使用浏览器中缓存的版本),为了收到适当的响应,应该像下面这样检查上述两张状态代码:

    statusText:http状态说明(ok,fail)。

      if((xmlHttpReg.status>=200 && xmlHttpReg.status<300 )|| xmlHttpReg.status==304){
                       // console.log(xmlHttpReg.responseText);
                    document.getElementById("resText").innerHTML = xmlHttpReg.responseText;
                    document.getElementById("box1").innerHTML = xmlHttpReg.status;
    
                }else{
                      console.log("fail"+xmlHttpReg.status)
                }

    根据返回的状态码,可以显示服务端返回的内容,我们建议通过status来决定下一步操作。

    上面通过的是同步请求,如果要发送异步请求,我们需要检测readyState属性,该属性表示请求响应过程的当前活动阶段,这个属性可取的值如下:

    0:未初始化,尚调用open()方法

    1:启动,已经调用open()方法,但尚未调用send()方法;

    2:发送,已经调用send()方法,但尚未接收到响应。

    3:接收,已经接受到部分响应数据

    4:完成,接受到全部数据,而且已经可以在客户端使用了,如下所示:

      if(xmlHttpReg.readyState==4) {
                    if ((xmlHttpReg.status >= 200 && xmlHttpReg.status < 300 ) || xmlHttpReg.status == 304) {
    
                        document.getElementById("resText").innerHTML = xmlHttpReg.responseText;
                        document.getElementById("box1").innerHTML = xmlHttpReg.status;
                       // console.log(xmlHttpReg.responseXML);
    
                    } else {
                        console.log("fail" + xmlHttpReg.status)
                    }
                }

    只要readyState属性值由一个值变成另外一个值,都会触发onreadystatechange事件。

    get请求最常用与向服务器查询某些信息,可以将字符串参数追加到url末尾,以便将信息发送到服务器,判断url后面的参数如下代码

     function addURLParam(url,name,value){
    
                    url += (url.indexOf("?")==-1? "?":"&");
                    url +=encodeURIComponent(name)+"="+encodeURIComponent(value);  
                    return url;
    
                }
                var url = "b.txt",
                    url  = addURLParam(url,"name","zoumm");
                xmlHttpReg.open("get", url, true);
               // xmlHttpReg.setRequestHeader("myheader","myvalue");
                xmlHttpReg.send(null);
                xmlHttpReg.onreadystatechange = doResult; //设置回调函数

     post通常用于向服务器发送应该被保存的数据,post请求应该把数据作为请求的主体提交,

    详细代码:

    <script type="text/javascript">
    
    window.onload = function(){
        ajax();
    }
        function ajax() {
            //先声明一个异步请求对象
            var xmlHttpReg = null;
            if (window.ActiveXObject) {//如果是IE
    
                xmlHttpReg = new ActiveXObject("Microsoft.XMLHTTP");
    
            } else if (window.XMLHttpRequest) {
    
                xmlHttpReg = new XMLHttpRequest(); //实例化一个xmlHttpReg
            }
    
            //如果实例化成功,就调用open()方法,就开始准备向服务器发送请求
            if (xmlHttpReg != null) {
                //get请求
                function addURLParam(url,name,value){
    
                    url += (url.indexOf("?")==-1? "?":"&");
                    url +=encodeURIComponent(name)+"="+encodeURIComponent(value);
                    return url;
    
                }
                var url = "xml.xml",
                        url  = addURLParam(url,"name","zoumm");
                xmlHttpReg.open("get", url, true);//1"http://freegeoip.net/json?callback=handLeResponse
                // xmlHttpReg.setRequestHeader("myheader","myvalue");
                xmlHttpReg.send(null);
                xmlHttpReg.onreadystatechange = doResult; //设置回调函数
    
            }
    
            //回调函数
            //一旦readyState的值改变,将会调用这个函数,readyState=4表示完成相应
    
            //设定函数doResult()
            function doResult() {
                if(xmlHttpReg.readyState==4) {
                    if ((xmlHttpReg.status >= 200 && xmlHttpReg.status < 300 ) || xmlHttpReg.status == 304) {
                        var arrp= document.getElementsByName("num"),
                                arrSum= document.getElementsByName("snum"),
                            xLength=xmlHttpReg.responseXML.documentElement.getElementsByTagName("row");
    
                        for(var i=0;i<xLength.length;i++){
                                  var  xGETAttri =xLength[i].getAttribute("object"),
                                       yGETAttri =xLength[i].getAttribute("curyl");
                                       arrp[i].innerHTML =xGETAttri;
                                       arrSum[i].innerHTML =yGETAttri;
                                       console.log( yGETAttri);
    
                        }
    
    
                    } else {
                        console.log("fail" + xmlHttpReg.status)
                    }
                }
    
            }
    
    
        }
    
    
    </script>
  • 相关阅读:
    在命令行下运行Matlab
    VMWare无法共享文件夹(Win7宿主机Ubuntu14.04客户机)
    [转] CVonline: Image Databases
    第二天
    第一天
    二宝软件的NABCD分析
    用c++实现环形数组的最大子数组之和
    返回一个二维整数数组中最大子数组的和
    求最大子数组之和
    四则运算
  • 原文地址:https://www.cnblogs.com/zoumiaomiao/p/4923131.html
Copyright © 2011-2022 走看看