- 用Jq實(shí)現(xiàn)ajax,能解決很多瀏覽器的兼容問題,對(duì)操作ajax提高了很多的便利。
- 在滿足用戶需求上蛮位,jq對(duì)ajax異步操作進(jìn)行了封裝。$.ajax,$.post,$.get,$.getJSON鳞绕。
1失仁,$.ajax
- 這個(gè)是ajax的底層api,原型是jQuery.ajax( [settings ] )猾昆。
先放上一個(gè)實(shí)例
oBtn.onclick=function ()
{
$.ajax({
type:"GET",
url:"data.json",
dataType:"json",
success:function (data) {
},
error:function (jqXHR) {
alert("發(fā)生錯(cuò)誤"+jqXHR.status);
}
});
}
這是一個(gè)基本用法陶因,下面介紹主要的setting
1, accepts (默認(rèn): 取決于數(shù)據(jù)類型):內(nèi)容類型發(fā)送請求頭(Content-Type)垂蜗。
2, cache(默認(rèn): true, dataType為"script"和"jsonp"時(shí)默認(rèn)為false):如果設(shè)置為 false 解幽,瀏覽器將不緩存此頁面
3贴见, contents:一個(gè)以"{字符串/正則表達(dá)式}"配對(duì)的對(duì)象,根據(jù)給定的內(nèi)容類型躲株,解析請求的返回結(jié)果片部。
4, data:發(fā)送到服務(wù)器的數(shù)據(jù)霜定。將自動(dòng)轉(zhuǎn)換為請求字符串格式档悠。
5廊鸥,dataType (默認(rèn): Intelligent Guess (xml, json, script, or html):預(yù)期服務(wù)器返回的數(shù)據(jù)類型。如果不指定辖所,jQuery 將自動(dòng)根據(jù) HTTP 包 MIME 信息來智能判斷惰说,比如XML MIME類型就被識(shí)別為XML)
6,error:請求失敗時(shí)調(diào)用此函數(shù)
類型: Function( jqXHR jqXHR, String textStatus, String errorThrown )
7缘回,password:用于響應(yīng)HTTP訪問認(rèn)證請求的密碼
8吆视,success:請求成功后的回調(diào)函數(shù)。
類型: Function( Object data, String textStatus, jqXHR jqXHR )
9酥宴,username:于響應(yīng)HTTP訪問認(rèn)證請求的用戶名
10啦吧,url:發(fā)送請求的地址。
11拙寡, type:請求方式 ("POST" 或 "GET")授滓, 默認(rèn)為 "GET"。
12肆糕, timeout:設(shè)置請求超時(shí)時(shí)間(毫秒)般堆。此設(shè)置將覆蓋$.ajaxSetup() 里的全局設(shè)置。 超時(shí)周期開始于$.ajax訪問成功的那個(gè)時(shí)間點(diǎn)擎宝。
最后來幾個(gè)發(fā)送與接收作為例子收場
//保存數(shù)據(jù)實(shí)例
$.ajax({
type: "POST",
url: "some.php",
data: { name: "John", location: "Boston" }
success:(function( data ) {
alert( "Data Saved: " + data );
});
注意:
一般在json中加入
{
“success”:true;//表示請求是否成功;
“msg”: “xxx”;//表示請求的返回信息;
}用來檢驗(yàn)數(shù)據(jù)
2郁妈,對(duì)幾個(gè)數(shù)據(jù)校驗(yàn)轉(zhuǎn)換的函數(shù)分析辯解
- JSON.parse():用于從一個(gè)字符串中解析出json對(duì)象,一般后臺(tái)發(fā)來的文件有encode,這個(gè)時(shí)候前端需要decode
- JSON.stringify():作用與上面的剛好相反,用于從一個(gè)對(duì)象解析出字符串,
- eval():將JSON字符串解析為對(duì)象绍申,這個(gè)功能能完成JSON.parse()的功能噩咪,但是有不一樣的地方,比如下面這個(gè)例子
var str = '{"a":"b"}';
document.write(eval("("+str+")")); //正常解析為對(duì)象
var str = '{"a": (function(){alert("I can do something bad!");})()}';
eval('('+str+')'); //可以用來執(zhí)行木馬腳本
如果用惡意用戶在json字符串中注入了向頁面插入木馬鏈接的腳本,用eval也是可以操作的极阅,而用JSON.parse()則不必?fù)?dān)心這個(gè)問題胃碾,可見,雖然eval()功能很強(qiáng)大筋搏,但是實(shí)際用到的機(jī)會(huì)并不多仆百。
- jQuery.parseJSON():有的瀏覽器不支持JSON.parse()方法,使用jQuery.parseJSON()方法時(shí)奔脐,在瀏覽器支持時(shí)會(huì)返回執(zhí)行JSON.parse()方法的結(jié)果俄周,否則會(huì)返回類似執(zhí)行eval()方法的結(jié)果,以上結(jié)論參考jquery 1.9.1
3髓迎,jQuery.getJSON()
jq可能還是覺得上面的太多東西峦朗,于是繼續(xù)封裝
jQuery.getJSON( url [, data ] [, success(data, textStatus, jqXHR) ] )
這是一個(gè)Ajax函數(shù)的縮寫,這相當(dāng)于:
$.ajax({
dataType: "json",
url: url,
data: data,
success: success
});
實(shí)例:
$.getJSON("test.js", function(json) {
alert("JSON Data: " + json.users[3].name);
});
4排龄,同樣的波势,jQuery.post()與 jQuery.get()
- jQuery.post():使用一個(gè)HTTP GET請求從服務(wù)器加載數(shù)據(jù)。
- jQuery.get() : 使用一個(gè)HTTP POST 請求從服務(wù)器加載數(shù)據(jù)。