1. 程式人生 > >jQuery 中$.ajax $.get $.post 和$.getJSON 的 區別 和 用法

jQuery 中$.ajax $.get $.post 和$.getJSON 的 區別 和 用法

1、$.ajax 是 jQuery 底層 AJAX 實現,$.ajax是一種通用的底層封裝,$.ajax()請求資料之後,則需要使用回撥函式,有beforeSend、error、dataFilter、success、complete等。

2、$.get $.post是簡單易用的高層實現,我們使用$.get $.post方法,jQuery會自動封裝呼叫底層的$.ajax

3、$.get 只處理簡單的 GET 請求功能以取代複雜 $.ajax,請求成功時可呼叫回撥函式。不支援出錯時執行函式,否則必須使用$.ajax

4、$.post 只處理 post請求功能以取代複雜 $.ajax 。請求成功時可呼叫回撥函式。不支援出錯時執行函式,否則必須使用$.ajax

$.get("test.php", { name: "John", time: "2pm" } ) $.get方法在請求時會自動生成queryString提交給服務(name=John&time=2pm)。

.post.post方法提交的資料直接類似表單提交,提交的資料量比.get更大。

下面說一下用法:

.get和.post其實都是.ajax的一種,在.ajax中有一個type屬性,專門用來指定是get請求還是post請求的。如下:

$.ajax({ 
   url:”路徑”, 
   type:”post/get”, 
  datatype:”json”, 
  //成功的回撥函式 
   success:function(data){ 
   alert(“回撥函式成功了”); 
}, 
   //失敗的回撥函式 
   error:function(){ 
   alert(“伺服器請求失敗”); 
   },

    //傳送請求前呼叫,可以放一些“正在載入”之類的話 
    beforeSend:function(){ 
    alert(“正在載入”); 
    } 
}); 

所以無論是get請求還是post請求,都可以用ajax來寫。 下面我們來說一下get和post的區別:

1.安全性:get是通過http協議的header傳送請求,所以會將引數拼接在位址列中,所以安全性很差; post是通過http協議的body傳送請求,位址列中並不會出現,所以相對安全; 還有一點,用get方法傳送請求會被客戶端瀏覽器快取,通過檢視歷史記錄可以檢視到使用者資訊,所以非常不安全。

2.傳送大小:get只能傳送2kb,而post一般不受限制

3.效率:get效率高,post效率低

4.get就是為了從伺服器得到資料,而post則是傳送資料

舉個例子: .get()方法使用GET方式來進行非同步請求,它的語法結構為:.get( url [, data] [, callback] )

解釋一下這個函式的各個引數:

url:string型別,ajax請求的地址。 data:可選引數,object型別,傳送至伺服器的key/value資料會作為QueryString附加到請求URL中。 callback:可選引數,function型別,當ajax返回成功時自動呼叫該函式。

 $.get(“/login”,id:”12”,name:”zhangsan”,
           function(data,state){
            alert(data);
           }if(state==”ok”) {
              alert(“返回資料成功”);
           }elsealert {
            (“返回資料失敗”);
           }

.post()方法使用POST方式來進行非同步請求,它的語法結構為: $.post(url,[data],[callback],[type]) 這個方法和.get()用法差不多,唯獨多了一個type引數,那麼這裡就只介紹type引數吧,其他的參考上面.get()的。type:type為請求的資料型別,可以是html,xml,json等型別,如果我們設定這個引數為:json,那麼返回的格式則是json格式的,如果沒有設定,就和.get()返回的格式一樣,都是字串的。

$.post(“/login”,{id:’123’,name:’小明’},function(data){

   },"json")

下面我們來說一下getJSON(): getJSON()和get是一樣的,都是get請求,這就決定了,傳送的data資料量不能太多,否則造成url太長接收失敗(getJSON方式是不可能有post方式遞交的)。 區別是,getJSON專門請求json資料的,而且getJSON可以實現跨域請求。語法格式如下:

getJSON(url,[data],[callback]) 
url:string型別, 傳送請求地址 
data :可選引數, 待發送 Key/value 引數 ,同get,post型別的data 
callback :可選引數,載入成功時回撥函式,同get,post型別的callback