天天看點

ajax異步請求以及Jquery架構封裝的異步請求方式

一、AJAX - 阿賈克斯

1、什麼是AJAX?

Asynchronous  Javascript  And  Xml

是可以建立快速動态網頁的技術。可以實作異步更新,而不需要加載整個網頁,隻加載需要更     新某部分網頁。                        

  同步通路:當用戶端向伺服器發送請求時,伺服器在處理過程中,浏覽器隻能等待,效率偏               低。    
  異步通路:當用戶端向伺服器發送請求時,伺服器在處理過程中,用戶端可以做其他的操作               不需要一直等待,效率偏高。

**   Xml : eXtensible  Markup  Language
                可擴充的     标簽      語言        

  AJAX優點:
           1、異步 通路

           2、局部 重新整理        

  AJAX的使用場合:

           1、搜尋建議

           2、表單驗證

           3、前後端完全分離
           

2、AJAX的核心對象 – 異步對象(XMLHttpRequest)

1、什麼是XMLHttpRequest?

       簡稱為“xhr”,稱為異步對象,代替浏覽器向伺服器發送請求并接受響應

       xhr是由JS來提供

   2、建立異步對象(xhr)

       主流的異步對象是XMLHttpRequest類型的,并且主流浏覽器都支援(IE7+,                      Chorme,Firefox,Opera)全部支援,但不支援IE低版本浏覽器(IE6以及以下)
    
       XMLHttpRequest,需要使用ActiveXobject() 來建立異步對象
         
        支援  XMLHttpRequest:

             new  XMLHttpRequest()

        不支援 XMLHttpRequest:

               new  ActiveXobject("Microsoft,XMLHTTP")

  下面是common.js代碼:


     function getXhr(){
    //如果浏覽器支援XMLHttpRequest,則建立XMLHttpRequest的對象并傳回
    if(window.XMLHttpRequest){
        return new XMLHttpRequest();
    }else{
        //如果浏覽器不支援XMLHttpRequest的話,則建立ActiveXObject的對象并傳回
        return new ActiveXObject("Microsoft.XMLHTTP");
    }
}
           

3、xhr的成員

1、方法 - open()

  作用:建立請求

  文法:open(method,url,async)

        method:請求方法,取值為'get'或'post'

        url:請求位址,字元串

        async:是否采用異步的方式發送請求

        true:使用異步方式發送請求

        alse:使用同步方式發送請求

     ex:

         xhr.open('get','/server',true)



   2、屬性 - readyState

         作用:請求狀态,通過不同的請求狀态值來表示xhr與伺服器的互動情況

         由0-4共五個值來表示五個不同的狀态

         0:請求尚未初始化

         1:xhr已經與伺服器建立連結

         2:伺服器端已經開始接收請求

         3:請求正在進行中

         4:響應已完成

  3、屬性 - status

       作用:表示伺服器端的響應狀态碼

         200:表示伺服器正确處理所有的請求以及給出響應

         404:請求資源不存在

         500:伺服器内部錯誤

  4、屬性 - responseText

        作用:伺服器端的響應資料

  5、事件 - onreadystatechange

      作用:每當xhr的readyState屬性值發生改變的時候要觸發的操作 - 回調函數

      在該函數中,隻有當readyState的值為4并且status的值為200時,可以正常接收           responseText

   6、方法 - send()

        作用:通知xhr向伺服器發送請求

        文法:send(body)

                body:表示請求的主體

                get請求:沒有請求主體的,是以body的值為null

                        xhr.send(null)

                post請求:有請求主體的,是以body的位置處要表示請求資料

                       xhr.send("請求資料")

                       xhr.send("參數=值&參數=值")
           

4、AJAX的操作步驟

1、GET請求

      1、建立xhr對象

      2、建立請求 - open()

      3、設定回調函數 - onreadystatechange

         判斷狀态并且接收資料

      4、發送請求 - send()

           注意:如果有請求送出資料,則需要在url的後面拼查詢字元串

  2、POST請求

       1、請求送出的資料要作為send() 的參數進行送出

           xhr.send('參數=值&參數=值');

       2、修改請求消息頭

           在AJAX中,送出POST請求時,AJAX預設将Content-Type請求消息頭的值修改                    為”text/plain“,是以導緻資料無法正常送出

           解決方案:

                 将Content-Type的請求消息頭再修改回”application/x-www-form-                      urlencoded“即可

          
       xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded")  

           注意:如果有請求送出資料,則需要在send()中傳遞資料


例如:
           

$(function(){

$("#btnAjax").click(function(){

//1.擷取xhr

var xhr = getXhr();

//2.建立請求

xhr.open(‘get’,’/01-server’,true);

//3.設定回調函數

xhr.onreadystatechange = function(){

if(xhr.readyState4 && xhr.status200){

var resTxt = xhr.responseText;

console.log(resTxt);

}

}

//4.發送請求

xhr.send(null)

});

});

二、JQUERY 與 AJAX

1、$obj.load(url,data,callback)

作用:異步加載資料到 $obj 元素中
 參數:
      url:異步請求的位址
      data:傳遞給伺服器端的參數(可選),該資料将決定請求方法是什麼
             1、可以傳遞普通的字元串
                "name=MrWang&age=30"
             2、可以是JSON對象
                 {
                     "name":"Mrwang",
                     "age":30,
                   }
      callback:異步請求成功之後的回掉函數(可選)
                 取值為匿名函數
                 function(resText,statusText){
                        rexText:響應資料,
                        statusText:響應資料的狀态 
                        }

  2、$.get(url,[data],[callback],[type])
         url:異步請求位址
         data:異步請求的參數
               1、字元串:name = value&name=value
               2、JSON:{"name":"value","name":"value"}
         callback:請求成功後的回調函數
                  function(resText){
                       rexText:表示響應成功後的響應資料
                  }
          type:響應回來的資料的類型
                  1、html:響應回來的是html文本
                  2、text:響應回來的是資料是text文本
                  3、json:json對象
                  4、script:js腳本代碼
                      注意:如果此處指定了類型,那麼在callback中,無需做類型的轉換
   3、$.post()
   4、$.ajax()
        作用:自定所有的ajax行為
        文法:$.ajax({ajax設定的參數資料對象});
         參數:
             1、url:字元串,表示異步請求的位址
             2、type:字元串,請求方式(get,post)
             3、data:傳遞到伺服器端的參數
                   1、字元串:"name=value&name=value"
                   2、JSON對象:{"name":"value"}
             4、dataType:字元串,響應回來的資料的格式
                      1、html
                       2、xml
                       3、text
                       4、script
                        5、json
                        6、jsonp
             5、success:回調函數,請求響應成功時的回調函數
                       function(data){
                            data:表示伺服器端響應回來的資料
                         }                 
             6、error:回調函數,請求或響應失敗時的回調函數
             7、beforeSend:回調函數,在發送ajax請求之前的回調函數,如果return                                             false的話則表示終止本次請求
           

例子:以下便是Jquery中$ajax():

$(function(){
            $("#btnload").click(function(){
                var params = {
                    'name':'MrWang',
                    'age':32,
                }
                $("#show").load('/02-server',
                params,
                function(resText,statusText){
                    console.log("響應成功");
                    console.log("resText:"+resText);
                    console.log("statusText:"+statusText);
                });
            });
        });
           

繼續閱讀