原生 js 封裝 ajax的兩種方式(get,post)

創(chuàng)建一個ajax.js文件



封裝ajax:

/*ajax封裝

? ? ?????? @param option:傳入一個對象

? ? ?????? 屬性分別為(順序可以打亂):

? ? ??????????? url:請求的路徑

? ? ??????????? type:請求的不同類型get或post

? ? ??????????? data:發(fā)送的數(shù)據(jù),格式:key1=value1&key2=value2

? ? ??????????? callback:回調(diào)函數(shù),方便用戶處理自己的數(shù)據(jù),傳遞邏輯????????? ?

? ? */

? ? function ajax(option){

? ? ?????? //創(chuàng)建異步對象

? ? ?????? var xhr = new XMLHttpRequest();

? ? ?????? //如果是get并且有數(shù)據(jù)

? ? ?????? if(option.type=='get'&&option.data){

? ? ??????????? option.url=option.url+'?'+option.data;

? ? ?????? }

? ? ?????? //設(shè)置請求行

? ? ?????? xhr.open(option.type,option.url);

? ? ?????? //設(shè)置請求頭(post有數(shù)據(jù)發(fā)送才需要設(shè)置請求頭)

? ? ?????? //判斷是否有數(shù)據(jù)發(fā)送

? ? ?????? if(option.type=='post'&&option.data){

? ? ???????????? xhr.setRequestHeader('content-type','application/x-www-form-urlencoded');

? ? ?????? }

? ? ?????? //注冊回調(diào)函數(shù)

? ? ?????? xhr.onreadystatechange = function(){

? ? ???????????? if(xhr.readyState==4&&xhr.status==200){

? ? ???????????????? //接收返回的數(shù)據(jù)類型

? ? ???????????????? var type = xhr.getResponseHeader('Content-Type');

? ? ???????????????? //json格式

? ? ???????????????? if(type.indexOf('json')!=-1){

? ? ????????????????????? option.callback(JSON.parse(xhr.responseText));

? ? ???????????????? }

? ? ???????????????? //xml格式

? ? ???????????????? else if(type.indexOf('xml')!=-1){

? ? ????????????????????? option.callback(xhr.responseXML);

? ? ???????????????? }

? ? ???????????????? //普通格式

? ? ???????????????? else{

? ? ????????????????????? option.callback(xhr.responseText);

? ? ???????????????? }

? ? ???????????? }

? ? ?????? }

? ? ?????? //發(fā)送請求主體

? ? ?????? //判斷不同的請求類型

? ? ?????? xhr.send(option.type=='post'?option.data:null);

? ? }


get方法:

? ??/*ajax封裝-get

?????? @param url:請求的路徑

?????? @param data:發(fā)送的數(shù)據(jù),格式:key1=value1&key2=value2

?????? @param callback:回調(diào)函數(shù),方便用戶處理自己的數(shù)據(jù),傳遞邏輯

*/

function get(url, data, callback){

? ? ?????? //創(chuàng)建異步對象

? ? ?????? var xhr = new XMLHttpRequest();

? ? ?????? //判斷data是否為空

? ? ?????? if(data){

? ? ?????????? url=url+'?'+data;

? ? ?????? }

? ? ?????? //設(shè)置請求行

? ? ?????? xhr.open('get',url);

? ? ?????? //設(shè)置請求頭(get可以省略)

? ? ?????? //注冊回調(diào)函數(shù)

? ? ?????? xhr.onreadystatechange = function(){

? ? ??????????? if(xhr.readyState==4&&xhr.status==200){

? ? ??????????????? //調(diào)用傳遞的回調(diào)函數(shù)

? ? ??????????????? callback(xhr.responseText);

? ? ??????????? }

? ? ?????? }

? ? ?????? //發(fā)送請求主體

? ? ?????? xhr.send(null);

? ? }

post方法:

/*ajax封裝-post

? ? ?????? @param url:請求的路徑

? ? ?????? @param data:發(fā)送的數(shù)據(jù),格式:key1=value1&key2=value2

? ? ?????? @param callback:回調(diào)函數(shù),方便用戶處理自己的數(shù)據(jù),傳遞邏輯

? ? */

? ? function post(url, data, callback){

? ? ?????? //創(chuàng)建異步對象

? ? ?????? var xhr = new XMLHttpRequest();

? ? ?????? //設(shè)置請求行

? ? ?????? xhr.open('post',url);

? ? ?????? //設(shè)置請求頭(post有數(shù)據(jù)發(fā)送才需要設(shè)置請求頭)

? ? ?????? //判斷是否有數(shù)據(jù)發(fā)送

? ? ?????? if(data){

? ? ???????????? xhr.setRequestHeader('content-type','application/x-www-form-urlencoded');

? ? ?????? }

? ? ?????? //注冊回調(diào)函數(shù)

? ? ?????? xhr.onreadystatechange = function(){

? ? ???????????? if(xhr.readyState==4&&xhr.status==200){

? ? ???????????????? //調(diào)用傳遞的回調(diào)函數(shù)

? ? ???????????????? callback(xhr.responseText);

? ? ???????????? }

? ? ?????? }

? ? ?????? //發(fā)送請求主體

? ? ?????? xhr.send(data);

? ? }

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末浅役,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌铛碑,老刑警劉巖稳诚,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件伏伐,死亡現(xiàn)場離奇詭異,居然都是意外死亡可训,警方通過查閱死者的電腦和手機膘滨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進店門甘凭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人火邓,你說我怎么就攤上這事丹弱。” “怎么了铲咨?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵躲胳,是天一觀的道長。 經(jīng)常有香客問我鸣驱,道長泛鸟,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任踊东,我火速辦了婚禮北滥,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘闸翅。我一直安慰自己再芋,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布坚冀。 她就那樣靜靜地躺著济赎,像睡著了一般。 火紅的嫁衣襯著肌膚如雪记某。 梳的紋絲不亂的頭發(fā)上司训,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天,我揣著相機與錄音液南,去河邊找鬼壳猜。 笑死,一個胖子當(dāng)著我的面吹牛滑凉,可吹牛的內(nèi)容都是我干的统扳。 我是一名探鬼主播喘帚,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼咒钟!你這毒婦竟也來了吹由?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤朱嘴,失蹤者是張志新(化名)和其女友劉穎倾鲫,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體腕够,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡级乍,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年舌劳,在試婚紗的時候發(fā)現(xiàn)自己被綠了帚湘。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡甚淡,死狀恐怖大诸,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情贯卦,我是刑警寧澤资柔,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站撵割,受9級特大地震影響贿堰,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜啡彬,卻給世界環(huán)境...
    茶點故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一羹与、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧庶灿,春花似錦纵搁、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至峻呕,卻和暖如春利职,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背瘦癌。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工猪贪, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人佩憾。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓哮伟,卻偏偏與公主長得像干花,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子楞黄,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,592評論 2 353

推薦閱讀更多精彩內(nèi)容