zoukankan      html  css  js  c++  java
  • Ajax复习笔记(一)

      悦老大说:不要以为会用$.ajax()就觉得自己了解ajax了。今天也空,正好把ajax的相关知识再复习一遍,顺便做个记录。

    一、什么是AJAX

      所谓的ajax,是Asynchronous Javascript XML的简写;简单来说就是js异步请求数据。ajax的技术核心是XMLHttpRequest对象,也是就XHR。

    二、关于XMLHttpRequest对象

      1、在浏览器中创建XHR对象,需要通过 var xhr = new XMLHttpRequest() ;

      2、XHR最早由IE实现,但IE6并不支持原生的XHR对象,但IE6可以使用ActiveXObject实现。

      3、兼容IE6的XHR创建方法:

    var xhr ;
    if ( window.XMLHttpRequest ){
        xhr = new XMLHttpRequest() ;     
    } else {
        xhr = new ActiveXObject("Microsoft.XMLHTTP") ;     
    }

    三、XHR的用法

      1、xhr.open():

        在使用xhr时,要调用的第一个方法就是open(),它接受3个参数:请求类型、请求地址、是否异步;

        例:xhr.open( 'get' , 'a.php' , false ) ;

          true:表示异步,即请求后不等服务器返回数据就立即执行下面的代码;

          false:表示同步,即等服务器返回数据后再执行下面的代码。

        open()方法并不会真正发送请求,只是启动一个请求以备发送。

      2、xhr.send():

        send()方法接收一个参数,即 需要发送的数据;

        如果不需要发送数据,则最好传入null,部分浏览器需要传。

        调用send()方法后,请求会被分派到服务器。接下来就是等着服务器反回响应数据。

      3、服务器响应数据:

        服务器响应的数据,会保存在xhr的属性中:

          1、responseText:作为响应文体被返回的文本;

          2、responseXML:如果响应的内容类型是"text/xml"或者"application/xml",响应数据会在这里。

          3、status:响应的HTTP状态。

          4、statusText:HTTP状态的说明。

      4、分析服务器的响应数据:

        在接收到响应后,第一步就是检查status属性,以确定响应是否成功返回。

        status值为200表示数据请求成功。304表示请求的资源没有修改,可直接使用缓存的数据,也表示响应是成功的。

        响应成功后,responseText的数据就已经就绪,如果内容类型正确,responseXML也可以访问了。

        以下代码检测数据是否成功:    

    if ( ( xhr.status >=200 && xhr.status <= 300 ) || xhr.status ==304 ){
        //请求成功
    } else {
        //请求不成功
    }

    四、XHR的状态变化

      xhr的状态变化表现在xhr的readyState属性。该属性表示请求/响应过程的当前活动阶段。

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

        1:启动。开始调用open()方法。

        2:发送。开始调用send()方法。

        3:接收。开始接收数据。

        4:完成。已经接收到全部数据。

      每次readyState值发生变化时,都会触发readystatechange事件。

      当readyState值为4时,表示请求完成。

      onreadystatechange事件必须在open()前进行绑定,才能确保跨浏览器的兼容性。

    五、稍微完整点的AJAX请求示例

      

    var xhr = null ;
    if( window.XMLHttpRequest ){   
         xhr = new XMLHttpRequest() ; 
    }else{        
         xhr = new ActiveXObject( "Microsoft.XMLHTTP" ) ;
    }
    xhr.open("get","./php/get.php?user="+userName.value , true );
    xhr.onreadystatechange = function(){
        if( xhr.readyState ===4 ){
              if( (xhr.status >= 200 && xhr.status <=300) || xhr.status == 304 ){
                   oMsg.innerHTML = xhr.responseText ;
              }else{
                   console.log( xhr.statusText , xhr.status );
              }      
        }
    
    }
    xhr.send( null ) ;    
  • 相关阅读:
    LeetCode 88. Merge Sorted Array
    LeetCode 75. Sort Colors
    LeetCode 581. Shortest Unsorted Continuous Subarray
    LeetCode 20. Valid Parentheses
    LeetCode 53. Maximum Subarray
    LeetCode 461. Hamming Distance
    LeetCode 448. Find All Numbers Disappeared in an Array
    LeetCode 976. Largest Perimeter Triangle
    LeetCode 1295. Find Numbers with Even Number of Digits
    如何自学并且系统学习计算机网络?(知乎问答)
  • 原文地址:https://www.cnblogs.com/newh5/p/6083291.html
Copyright © 2011-2022 走看看