使用jQuery處理AJAX請(qǐng)求的基礎(chǔ)學(xué)習(xí)教程
$.ajax快捷方法
$.get(url,[data],[callback],[type]) $.post(url,[data],[callback],[type])
兩種方法請(qǐng)求方式不同,其他方式相同.
參數(shù):url[請(qǐng)求地址],data[請(qǐng)求的數(shù)據(jù)內(nèi)容(obj對(duì)象)],callback[回調(diào)函數(shù)(只能處理請(qǐng)求成功事件)],
type[請(qǐng)求返回?cái)?shù)據(jù)的編碼格式(默認(rèn)ContentType指定格式)]
$.get('/test?x=1'); $.get('/test',{z:2}); $.post('/test',{y:2}); $.get('/user',function(data,callbacktype,jqXHR){ data//返回?cái)?shù)據(jù) callbacktype//返回?cái)?shù)據(jù)的狀態(tài)信息(字符串) jqXHR//jQuery封裝的XHR對(duì)象 }); $(selector).load(url,[data],[callback])
將頁(yè)面片段載入到selector的容器里面
$("#content").load('/user'); $.getJSON(url,[data],[callback])
如果是JSON數(shù)據(jù)回調(diào)會(huì)成功,否則失敗
$.getJSON('/test',{type:1},function(){ console.log(argument) }); $.getScript(url,[claaback])
動(dòng)態(tài)加載腳本文件
$.gerScript('/js/test.js',function(){ alert(test(1,2)); });
$.ajax詳細(xì)使用方法
$.ajax(url,[settings]); $.ajax({ url:'/test', success:function(){ alert('ok'); } });
處理響應(yīng)結(jié)果的回調(diào)函數(shù):
success[成功],error[請(qǐng)求失敗],
statusCode[指明返回的狀態(tài)碼的回調(diào)函數(shù)],
complete[請(qǐng)求返回前的回調(diào)函數(shù)(處理返回不同狀態(tài)碼的請(qǐng)求)]
$.ajax('/test',{ success:function(data){ console.log(arguments); }, error:function(jqXHR,textStatus,err){ //jqXHR:jQuery增強(qiáng)的XHR //textStatus:請(qǐng)求完成狀態(tài) //err:底層通過(guò)throw拋出的異常對(duì)象,類(lèi)型與值與錯(cuò)誤類(lèi)型有關(guān) console.log(arguments); }, complete:function(jqXHR,textStatus){ //jqXHR:jQuery增強(qiáng)的XHR //textStatus:請(qǐng)求完成狀態(tài)success | error console.log(arguments); }, statusCode:function(){ '403':function(jqXHR,textStatus,err){ //jqXHR:jQuery增強(qiáng)的XHR //textStatus:請(qǐng)求完成狀態(tài) //err:底層通過(guò)throw拋出的異常對(duì)象,類(lèi)型與值與錯(cuò)誤類(lèi)型有關(guān) console.log(arguments); console.log(400); }, '400':function(){ console.log(400); } } });
請(qǐng)求的數(shù)據(jù):data,processData,contentType,traditional
$.ajax('/test',{ //請(qǐng)求的數(shù)據(jù)內(nèi)容 data:{ a:1, b:2 }, //請(qǐng)求的方式 type:'POST', //是否對(duì)請(qǐng)求的數(shù)據(jù)進(jìn)行轉(zhuǎn)碼(用于傳輸數(shù)據(jù)為html節(jié)點(diǎn)內(nèi)容) processData:true, //當(dāng)前的數(shù)據(jù)是否使用傳統(tǒng)方式進(jìn)行url編碼 traditional:true, //請(qǐng)求數(shù)據(jù)編碼格式 contentType:'application/json' });
響應(yīng)數(shù)據(jù):dataType,dataFilter
$.ajax('/test',{ success:function(data){ console.log(typeof data) }, //定義的返回?cái)?shù)據(jù)的類(lèi)型 dataType:'json | html | text | jsonp | script', //返回底層的原始數(shù)據(jù)進(jìn)行預(yù)處理 dataFilter:function(data,type){ //data:原始數(shù)據(jù) //type:指定的數(shù)據(jù)類(lèi)型 } });
前置處理:beforeSend
$.ajax('/test',{ beforeSend:function(jqXHR,settings){ console.log(arguments); jqXHR.setRequestHeader('test','haha'); jqXHR.testData = {a:1,b:2}; }, complete:function(jqXHR){ console.log(jqXHR.testData) } });
請(qǐng)求類(lèi)型:GET(默認(rèn)) | POST | PUT | DELETE
同步異步:async(默認(rèn)true)
是否緩存:cache(默認(rèn)true)
其他參數(shù):
1.global[是否觸發(fā)全局事件]
2.ifModifed[僅在服務(wù)器數(shù)據(jù)改變時(shí)候加載數(shù)據(jù)]
3.username,password[http需要驗(yàn)證時(shí)候]
4.timeout[設(shè)置請(qǐng)求超時(shí)時(shí)間,若請(qǐng)求超時(shí)觸發(fā)error]
5.context[回調(diào)中this指向的對(duì)象]
其他相關(guān)的API
$.ajaxSetup(option)
設(shè)置全局默認(rèn)參數(shù)
//默認(rèn)為get請(qǐng)求 $.ajax('/test'); //修改全局請(qǐng)求方式為post $.ajaxSetup({ type:'post', headers:{ test:new Date().getTime }, cache:false }); //請(qǐng)求方式改變?yōu)閜ost $.ajax('/test'); $.ajaxPrefilter([dataTypes],handler(option,originalOptions,jqXHR))
請(qǐng)求發(fā)起前的預(yù)處理,提供了一種AOP(面向切面)編程模式,常見(jiàn)用途:
1.根據(jù)option設(shè)定執(zhí)行特定處理邏輯
2.修改option值改變請(qǐng)求默認(rèn)行為
3.通過(guò)return修改默認(rèn)dataType
例:通過(guò)return修改默認(rèn)dataType
$.ajaxPrefilter('text html json',function(options,originalOptions,jqXHR){ //options請(qǐng)求參數(shù),含默認(rèn)值 //originalOptions請(qǐng)求時(shí)傳入的參數(shù),不含默認(rèn)值 //jqXHR:jQuery增強(qiáng)的XHR console.log(arguments); if(options.url == '/test'){ return 'text'; } }); $.ajax('/test',{ type:'post', dataType:'text', //自定義屬性 test:'haha' });
例:多次請(qǐng)求僅最后一次有效,避免多次請(qǐng)求導(dǎo)致的數(shù)據(jù)混亂
var requests = {}; $.ajaxPrefilter(function(options,originalOptions,jqXHR){ if(requests[options.url]){ requests[options.url].abort(); } requests[options.url] = jqXHR; }); $.ajax('/test/'); $.ajax('/test/');
例:統(tǒng)一修改請(qǐng)求路徑
$.ajaxPrefilter(function(options){ if(options.url.substr(0,5) == '/usr'){ options.url = options.url.replace('/usr/','/user/'); options.header = { a:1 } } }); $.ajax('/usr/');
全局事件
jQuery-1.9以后,全局事件必須綁定在document上
$(document).ajaxSuccess(globalEventHander); $(document).ajaxError(globalEventHander); $(document).ajaxComplete(globalEventHander); $(document).ajaxStart(globalEventHander); $(document).ajaxStop(globalEventHander); $(document).ajaxSend(globalEventHander); function globalEventHander(event){ console.log(arguments); console.log(event.type); } $.ajax('/test?err=y');//請(qǐng)求成功 $.ajax('/test?err=n');//請(qǐng)求失敗 //請(qǐng)求順序: //ajaxStart >> ajaxSend >> ajaxSend >> ajaxSuccess >> ajaxComplete >> ajaxError >> ajaxComplete >> ajaxStop
序列化
1.param[序列化一個(gè) key/value 對(duì)象]
2.serialize[通過(guò)序列化表單值,創(chuàng)建 URL 編碼文本字符串]
3.serializeArray[通過(guò)序列化表單值來(lái)創(chuàng)建對(duì)象數(shù)組(名稱和值)]
例:param()
var params = { a:1, b:2 }; var str = $.param(params); console.log(str); //a=1&b=2"
例:serialize()
<form> <div><input type="text" name="a" value="1"/></div> <div><input type="text" name="b" value="2"/></div> <div><input type="hidden" name="c" value="3"/></div> </form> <script type="text/javascript"> $('form').submit(function() { console.log($(this).serialize()); //a=1&b=2&c=3 return false; }); </script>
例:serializeArray()
<form> First:<input type="text" name="First" value="1" /><br /> Last :<input type="text" name="Last" value="2" /><br /> </form> <script type="text/javascript"> $('form').click(function(){ x=$("form").serializeArray(); console.log(x); //{[name:First,value:1],[name:Last,value:2]} }); </script>
ajax鏈?zhǔn)骄幊谭椒?br /> 在開(kāi)發(fā)的過(guò)程,經(jīng)常會(huì)遇到一些耗時(shí)間的操作,比如ajax讀取服務(wù)器數(shù)據(jù)(異步操作),遍歷一個(gè)很大的數(shù)組(同步操作)。不管是異步操作,還是同步操作,總之就是不能立即得到結(jié)果,JS是單線程語(yǔ)音,不能立即得到結(jié)果,便會(huì)一直等待(阻塞)。
一般的做法就是用回調(diào)函數(shù)(callback),即事先定義好一個(gè)函數(shù),JS引擎不等待這些耗時(shí)的操作,而是繼續(xù)執(zhí)行下面的代碼,等這些耗時(shí)操作結(jié)束后,回來(lái)執(zhí)行事先定義好的那個(gè)函數(shù)。如下面的ajax代碼:
$.ajax({ url: "test.html", success: function(){ console.log("success"); }, error: function(){ console.log("error"); } });
但這樣寫(xiě)不夠強(qiáng)大靈活,也很啰嗦。為此,jQuery1.5版本引入Deferred功能,為處理事件回調(diào)提供了更加強(qiáng)大而靈活的編程模式。
$.ajax("test.html") .done( function(){ console.log("success"); } ) .fail( function(){ console.log("error"); } );
不就是鏈?zhǔn)秸{(diào)用嘛,有何優(yōu)點(diǎn)?
優(yōu)點(diǎn)一:可以清晰指定多個(gè)回調(diào)函數(shù)
function fnA(){...} function fnB(){...} $.ajax("test.html").done(fnA).done(fnB);
試想一下,如果用以前的編程模式,只能這么寫(xiě):
function fnA(){...} function fnB(){...} $.ajax({ url: "test.html", success: function(){ fnA(); fnB(); } });
優(yōu)點(diǎn)二:為多個(gè)操作指定回調(diào)函數(shù)
$.when($.ajax("test1.html"), $.ajax("test2.html")) .done(function(){console.log("success");}) .fail(function(){console.log("error");});
用傳統(tǒng)的編程模式,只能重復(fù)寫(xiě)success,error等回調(diào)了。
- Javascript 基礎(chǔ)---Ajax入門(mén)必看
- Jquery ajax基礎(chǔ)教程
- ajax跨域(基礎(chǔ)域名相同)表單提交的方法
- 零基礎(chǔ)學(xué)習(xí)AJAX之AJAX的簡(jiǎn)介和基礎(chǔ)
- JQuery的ajax基礎(chǔ)上的超強(qiáng)GridView展示
- ajax 入門(mén)基礎(chǔ)之 XMLHttpRequest對(duì)象總結(jié)
- Ajax+PHP簡(jiǎn)單基礎(chǔ)入門(mén)實(shí)例教程
- AJAX技術(shù)基礎(chǔ)介紹
- Ajax.基礎(chǔ)教程 電子書(shū)版 提供下載
- Ajax基礎(chǔ)知識(shí)詳解
相關(guān)文章
jQuery實(shí)現(xiàn)可以控制圖片旋轉(zhuǎn)角度效果(附demo源碼下載)
這篇文章主要介紹了jQuery實(shí)現(xiàn)可以控制圖片旋轉(zhuǎn)角度效果,可實(shí)現(xiàn)通過(guò)下方的滑塊拖動(dòng)控制圖片旋轉(zhuǎn)的功能,涉及jQuery操作頁(yè)面元素樣式動(dòng)態(tài)變換的技巧,并附帶demo源碼供讀者下載,需要的朋友可以參考下2016-01-01jQuery plugin animsition使用小結(jié)
本文通過(guò)實(shí)例代碼給大家分享了jQuery plugin animsition用法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧2017-09-09boxy基于jquery的彈出層對(duì)話框插件擴(kuò)展應(yīng)用 彈出層選擇器
當(dāng)大家進(jìn)行復(fù)雜功能設(shè)計(jì)的時(shí)候,在對(duì)多級(jí)聯(lián)選擇進(jìn)行設(shè)計(jì),為了獲得更好的用戶體驗(yàn)和節(jié)省頁(yè)面空間,往往會(huì)使用彈出層的方法。2010-11-11jquery animate實(shí)現(xiàn)鼠標(biāo)放上去顯示離開(kāi)隱藏效果
本文為大家介紹下使用jquery animate實(shí)現(xiàn)鼠標(biāo)放上去顯示,離開(kāi)就隱藏的效果,感興趣的朋友可以參考下哈,希望對(duì)大家有所幫助2013-07-07ASP.NET jQuery 實(shí)例8 (動(dòng)態(tài)添加內(nèi)容到DropDownList)
在web應(yīng)用里,我們經(jīng)常需要通過(guò)其他控件的事件觸發(fā)動(dòng)態(tài)構(gòu)造DropDownList數(shù)據(jù)內(nèi)容。在這節(jié)中,我們將會(huì)看到如何實(shí)現(xiàn)通過(guò)選擇第一個(gè)下來(lái)框的內(nèi)容來(lái)動(dòng)態(tài)構(gòu)造第二個(gè)下拉框的內(nèi)容2012-02-02jQuery插件jRumble實(shí)現(xiàn)網(wǎng)頁(yè)元素抖動(dòng)
jRumble是jquery的插件,可以讓你選擇的元素抖動(dòng)。 調(diào)用時(shí)只需一句代碼即可,有些抖動(dòng)效果還挺可愛(ài),可自定義的抖動(dòng)效果,十分的炫酷,有需要的小伙伴可以參考下。2015-06-06Jquery 類(lèi)網(wǎng)頁(yè)微信二維碼圖塊滾動(dòng)效果具體實(shí)現(xiàn)
網(wǎng)頁(yè)微信二維碼圖塊滾動(dòng)效果想必大家都有見(jiàn)到過(guò)吧,在接下來(lái)的文章中將為大家詳細(xì)介紹下使用Jquery是如何實(shí)現(xiàn),感興趣的朋友可以參考下2013-10-10jQuery-serialize()輸出序列化form表單值的方法
jQuery-serialize()輸出序列化表單值在工作中很常見(jiàn)也很實(shí)用,于是本人搜集整理了一些,需要了解的朋友可以詳細(xì)參考下2012-12-12