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)。
.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