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 ) ;    
  • 相关阅读:
    Xcode8中Swift3.0适配问题
    Swift3.0语法变化
    一起聊聊 Swift 3.0
    Swift 3.0 的 open,public,internal,fileprivate,private 关键字
    leetcode先刷_Binary Tree Level Order Traversal II
    java + memcached安装
    POJ 2533-Longest Ordered Subsequence(DP)
    网络协议——IP
    使用百度地图——入门
    取消延时功能
  • 原文地址:https://www.cnblogs.com/newh5/p/6083291.html
Copyright © 2011-2022 走看看