關(guān)于原生JS的AJAX

一限煞、什么是AJAX凯傲?以及AJAX誕生緣由

什么是AJAX往衷?

AJAX全稱是異步JS和XML(Asynchronous JavaScript And XML)象对,它由幾種技術(shù)構(gòu)成:包括XML衔憨,DOM等叶圃;
通常的使用是利用JS向服務(wù)器發(fā)送HTTP請(qǐng)求,獲取到數(shù)據(jù)后(一般為json或者text格式)践图,再利用DOM將數(shù)據(jù)填充進(jìn)html標(biāo)簽中掺冠;

AJAX誕生緣由

AJAX歷史(摘抄至阮一峰AJAX教程
1999年,微軟公司發(fā)布IE瀏覽器5.0版,第一次引入新功能:允許JavaScript腳本向服務(wù)器發(fā)起HTTP請(qǐng)求德崭。這個(gè)功能當(dāng)時(shí)并沒(méi)有引起注意斥黑,直到2004年Gmail發(fā)布和2005年Google Map發(fā)布,才引起廣泛重視眉厨。2005年2月锌奴,AJAX這個(gè)詞第一次正式提出,指圍繞這個(gè)功能進(jìn)行開發(fā)的一整套做法憾股。從此鹿蜀,AJAX成為腳本發(fā)起HTTP通信的代名詞,W3C也在2006年發(fā)布了它的國(guó)際標(biāo)準(zhǔn)服球。

AJAX為何誕生茴恰?

在web發(fā)展的最初期,經(jīng)常使用的表單提交會(huì)默認(rèn)將頁(yè)面卸載(刷新)斩熊,但當(dāng)時(shí)頁(yè)面功能不多往枣,所以并沒(méi)有很大的影響。但是隨著web不斷地發(fā)展粉渠,頁(yè)面功能越來(lái)越多分冈,越來(lái)越強(qiáng)大,不只是用來(lái)瀏覽信息霸株,更多了許多與用戶進(jìn)行交互的地方雕沉,并且開始有用戶對(duì)原始表單提交會(huì)卸載頁(yè)面產(chǎn)生不滿,試想如下例子:
用戶注冊(cè)一個(gè)賬號(hào)淳衙,輸入了用戶名密碼之類的一大堆資料蘑秽,然后點(diǎn)擊提交饺著,頁(yè)面刷新箫攀,因網(wǎng)速原因等待一分鐘后,提示賬號(hào)已經(jīng)存在幼衰,請(qǐng)從新輸入靴跛,然后資料又要從新填寫;
假設(shè)當(dāng)時(shí)的頁(yè)面有點(diǎn)贊功能渡嚣,點(diǎn)一個(gè)贊刷新整個(gè)頁(yè)面一次梢睛,點(diǎn)一個(gè)按鈕又刷新一次;上述情況確實(shí)會(huì)讓人感到非常惱火识椰;于是绝葡,AJAX技術(shù)經(jīng)過(guò)一段時(shí)間的發(fā)展成熟后大規(guī)模的引用到頁(yè)面上,推動(dòng)了web行業(yè)的發(fā)展腹鹉;

二藏畅、XMLHttpRequest對(duì)象

什么是XMLHttpRequest?

XMLHttpRequest是原生JS的一個(gè)內(nèi)置對(duì)象功咒,用以通過(guò)瀏覽器向服務(wù)器發(fā)送HTTP請(qǐng)求進(jìn)行數(shù)據(jù)交互愉阎,XMLHttpRequest是AJAX技術(shù)的核心绞蹦,學(xué)習(xí)AJAX實(shí)質(zhì)上就是在學(xué)習(xí)XMLHttpRequest;

創(chuàng)建XMLHttpRequest對(duì)象

一般使用new關(guān)鍵字進(jìn)行創(chuàng)建榜旦,然后賦值給一個(gè)變量幽七,如下:

var xhr = new XMLHttpRequest();

三、XMLHttpRequest對(duì)象的屬性

XMLHttpRequest對(duì)象的屬性有哪些溅呢?有些什么用澡屡?

readyState
作用:

只讀屬性,用于表示XMLHttpRequest請(qǐng)求的當(dāng)前狀態(tài)咐旧,有五個(gè)數(shù)字(0,1,2,3,4);
0:表示已經(jīng)創(chuàng)建了XMLHttpRequest對(duì)象挪蹭,但是open方法還未被調(diào)用;
1:表示已調(diào)用open方法休偶,但還未調(diào)用send方法(請(qǐng)求還未被發(fā)送出去)梁厉,此時(shí)可以對(duì)請(qǐng)求的header進(jìn)行設(shè)定(setRequestHeader方法);
2:send方法已調(diào)用踏兜,數(shù)據(jù)已發(fā)送词顾,并且服務(wù)器接收到了請(qǐng)求;
3:表示服務(wù)器正在傳輸數(shù)據(jù)碱妆;
4:數(shù)據(jù)傳輸完成肉盹;
該方法一般在onreadystatechange事件中進(jìn)行查看

status
作用:

只讀屬性,表示本次請(qǐng)求的狀態(tài)疹尾,只返回一個(gè)數(shù)字上忍,常用的有如下幾個(gè)狀態(tài)碼:
200:OK(正常訪問(wèn));
301:Moved Permanently(永久移動(dòng))纳本;
302:Moved temporarily(暫時(shí)移動(dòng))窍蓝;
304:Not Modified(未修改);
307:Temporary Redirect(暫時(shí)重定向)繁成;
401:Unauthorized (未授權(quán))吓笙;
403:Forbidden(禁止訪問(wèn));
404:Not Found(未找到該網(wǎng)址)巾腕;500:Internal Server Error (找到網(wǎng)址但服務(wù)器發(fā)生錯(cuò)誤)面睛;

statusText
作用:

與status屬性類似,返回本次請(qǐng)求的狀態(tài)尊搬,不同點(diǎn)在于叁鉴,status只返回一個(gè)數(shù)字,而該屬性返回?cái)?shù)字和狀態(tài)解析

responseType
作用:

可通過(guò)對(duì)該屬性賦值來(lái)指定接收的數(shù)據(jù)類型佛寿,默認(rèn)為字符串幌墓,有如下幾種數(shù)據(jù)類型:
text:以字符串形式接收數(shù)據(jù);
json:以json對(duì)象形式接收數(shù)據(jù);
blob:blob對(duì)象克锣;
ArrayBuffer:ArrayBuffer對(duì)象茵肃;

response
responseText
responseXML

作用:

三者都是服務(wù)器返回的數(shù)據(jù),如果數(shù)據(jù)不完整或者獲取失敗袭祟,它們的值就為null验残;
不同點(diǎn):
response返回的是數(shù)據(jù)的主體部分,可以為任何類型(數(shù)組巾乳,json您没,XML,字符串等)胆绊;
responseText返回從服務(wù)器接收到的字符串氨鹏;
responseXML返回從服務(wù)器接收到的Document對(duì)象,若返回的數(shù)據(jù)不能解析為XML或者HTML格式压状,那該屬性的值為null仆抵,該值返回的數(shù)據(jù)會(huì)被直接解析DOM;

timeout
作用:

該屬性用以設(shè)置發(fā)送請(qǐng)求后多少毫秒后未接到回應(yīng)就自動(dòng)終止請(qǐng)求种冬,0為無(wú)時(shí)間限制镣丑,默認(rèn)值為0,可通過(guò)在open方法后send方法前對(duì)其進(jìn)行賦值來(lái)制定

withCredentials
作用:

該屬性制定跨域請(qǐng)求時(shí)娱两,個(gè)人的cookie信息是否附帶進(jìn)請(qǐng)求herder中莺匠,默認(rèn)為false(不攜帶cookie),可通過(guò)對(duì)其進(jìn)行賦值來(lái)制定

四十兢、XMLHttpRequest對(duì)象的方法

open

作用:

類比:撥打電話時(shí)的撥號(hào)行為趣竣,確定撥打(連接)的目標(biāo)
open方法用以設(shè)置請(qǐng)求的參數(shù),常用的有三個(gè)參數(shù):
第一個(gè)參數(shù):請(qǐng)求的類型(常用get或者post)旱物;
第二個(gè)參數(shù)是接口名和:這里要分兩種情況:
get請(qǐng)求時(shí):接口名+請(qǐng)求參數(shù)(鍵值對(duì)形式)遥缕;
post請(qǐng)求時(shí):只需要接口名;
第三個(gè)參數(shù):一個(gè)布爾值异袄,指定是否異步(true為異步通砍,false為同步玛臂,通常為true烤蜕,默認(rèn)為true);
第四和第五個(gè)參數(shù):填寫用于認(rèn)證的用戶名和密碼迹冤;

send

作用:

類比:撥打電話時(shí)讽营,填寫好電話號(hào)碼后按撥打鍵(發(fā)送請(qǐng)求);
send方法用以發(fā)送HTTP請(qǐng)求泡徙,需要在open方法調(diào)用后調(diào)用橱鹏;
參數(shù)分兩種形式:
get:get請(qǐng)求時(shí)無(wú)參數(shù);
post:post請(qǐng)求時(shí)參數(shù)為請(qǐng)求參數(shù)(鍵值對(duì)形式)

setRequestHeader

作用:

類比:填好電話號(hào)碼后,想好是用人工接聽(tīng)還是機(jī)器人接聽(tīng)莉兰,再撥打電話(這個(gè)比喻不是很恰當(dāng))挑围;
setRequestHeader方法用以設(shè)置請(qǐng)求的header部分,用以指定數(shù)據(jù)發(fā)送的格式糖荒,調(diào)用必須在open方法后杉辙,send方法前;
常用實(shí)例:setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')

abort

作用:

類比:撥打電話后把電話給掛了捶朵;
abort方法用以中斷已經(jīng)發(fā)出的AJAX請(qǐng)求蜘矢;
可以用這個(gè)方法來(lái)防止用戶重復(fù)點(diǎn)擊造成的發(fā)送重復(fù)請(qǐng)求的問(wèn)題;

getResponseHeader和getAllResponseHeaders

作用:

類比:打印我的通話清單(getResponseHeader為通話清單的指定信息综看,getAllResponseHeaders為通話清單的所有信息)品腹;
getResponseHeader和getAllResponseHeaders之間的不同點(diǎn):getResponseHeader接收一個(gè)參數(shù),該參數(shù)為需要返回的回應(yīng)頭部信息红碑;
getAllResponseHeader無(wú)需參數(shù)舞吭,返回所有的回應(yīng)頭信息;

overrideMimeType

作用:

用以將從服務(wù)器轉(zhuǎn)換回來(lái)的二進(jìn)制信息轉(zhuǎn)換為文本信息析珊,該方法已被responseText屬性代替

五镣典、XMLHttpRequest對(duì)象的事件以及對(duì)應(yīng)的事件監(jiān)聽(tīng)接口

事件名 接口名 作用
readyStateChange(請(qǐng)求狀態(tài)改變事件) onreadystatechange 當(dāng)readyState屬性的值發(fā)生變化時(shí),就會(huì)觸發(fā)readyStateChange唾琼,可以對(duì)onreadystatechange指定函數(shù)來(lái)監(jiān)控readyState的值兄春;注:通常來(lái)說(shuō),一次交互中锡溯,readyState的值會(huì)發(fā)生五次變化赶舆,也就是說(shuō)會(huì)觸發(fā)五次readyStateChange事件
abort(請(qǐng)求被中斷事件) onabort 通過(guò)onabort事件接口,可指定當(dāng)請(qǐng)求被中斷時(shí)的具體措施
error(請(qǐng)求發(fā)生錯(cuò)誤事件) onerror 通過(guò)onerror事件接口祭饭,可指定當(dāng)請(qǐng)求出錯(cuò)時(shí)的具體措施
load(請(qǐng)求完成芜茵,數(shù)據(jù)傳輸完畢事件) onload 通過(guò)onload事件接口,可指定當(dāng)數(shù)據(jù)傳輸完畢的具體措施
loadend(請(qǐng)求已完成事件) onloaded abort倡蝙、error和load這三個(gè)事件的觸發(fā)都會(huì)另外觸發(fā)loadend事件九串,表示請(qǐng)求已完成,但成功與否未知
對(duì)應(yīng)屬性timeout ontimeout 可通過(guò)ontimeout接口指定當(dāng)用戶請(qǐng)求超時(shí)的措施
progress(文件上傳事件) onprogress 可通過(guò)對(duì)onprogress接口指定措施來(lái)監(jiān)控文件上傳的進(jìn)度
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末寺鸥,一起剝皮案震驚了整個(gè)濱河市猪钮,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌胆建,老刑警劉巖烤低,帶你破解...
    沈念sama閱讀 212,718評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異笆载,居然都是意外死亡扑馁,警方通過(guò)查閱死者的電腦和手機(jī)涯呻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)腻要,“玉大人复罐,你說(shuō)我怎么就攤上這事⌒奂遥” “怎么了市栗?”我有些...
    開封第一講書人閱讀 158,207評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)咳短。 經(jīng)常有香客問(wèn)我填帽,道長(zhǎng),這世上最難降的妖魔是什么咙好? 我笑而不...
    開封第一講書人閱讀 56,755評(píng)論 1 284
  • 正文 為了忘掉前任篡腌,我火速辦了婚禮,結(jié)果婚禮上勾效,老公的妹妹穿的比我還像新娘嘹悼。我一直安慰自己,他們只是感情好层宫,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評(píng)論 6 386
  • 文/花漫 我一把揭開白布杨伙。 她就那樣靜靜地躺著,像睡著了一般萌腿。 火紅的嫁衣襯著肌膚如雪限匣。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,050評(píng)論 1 291
  • 那天毁菱,我揣著相機(jī)與錄音米死,去河邊找鬼。 笑死贮庞,一個(gè)胖子當(dāng)著我的面吹牛峦筒,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播窗慎,決...
    沈念sama閱讀 39,136評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼物喷,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了遮斥?” 一聲冷哼從身側(cè)響起峦失,我...
    開封第一講書人閱讀 37,882評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎伏伐,沒(méi)想到半個(gè)月后宠进,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,330評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡藐翎,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評(píng)論 2 327
  • 正文 我和宋清朗相戀三年材蹬,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吝镣。...
    茶點(diǎn)故事閱讀 38,789評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡堤器,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出末贾,到底是詐尸還是另有隱情闸溃,我是刑警寧澤,帶...
    沈念sama閱讀 34,477評(píng)論 4 333
  • 正文 年R本政府宣布拱撵,位于F島的核電站辉川,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏拴测。R本人自食惡果不足惜乓旗,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評(píng)論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望集索。 院中可真熱鬧屿愚,春花似錦、人聲如沸务荆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)函匕。三九已至娱据,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間盅惜,已是汗流浹背吸耿。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留酷窥,地道東北人咽安。 一個(gè)月前我還...
    沈念sama閱讀 46,598評(píng)論 2 362
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像蓬推,于是被迫代替她去往敵國(guó)和親妆棒。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評(píng)論 2 351

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

  • 前段時(shí)間沸伏,我學(xué)習(xí)了AJAX的相關(guān)基礎(chǔ)內(nèi)容糕珊,雖然其中還有許多未明白的地方,但是已經(jīng)可以進(jìn)行最基本的使用的了毅糟,所以寫下...
    大春春閱讀 2,556評(píng)論 0 1
  • 國(guó)家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報(bào)批稿:20170802 前言: 排版 ...
    庭說(shuō)閱讀 10,934評(píng)論 6 13
  • AJAX 原生js操作ajax 1.創(chuàng)建XMLHttpRequest對(duì)象 var xhr = new XMLHtt...
    碧玉含香閱讀 3,188評(píng)論 0 7
  • 2月19日红选,蕭山一小伙在論壇發(fā)帖說(shuō):老爸說(shuō),要是今年娶個(gè)老婆姆另,相當(dāng)于直接賺了50萬(wàn)喇肋。原因是他所在的地方要拆遷坟乾,多一...
    百事可愛(ài)喲閱讀 316評(píng)論 0 2
  • 01 對(duì)于寫字的人來(lái)說(shuō),清晨的時(shí)光是靈感的爆發(fā)期蝶防。王大海借著這每天少有的間隙在紙上沙沙的寫著什么甚侣,時(shí)而眉頭緊鎖,時(shí)...
    筆尖兒愛(ài)寫作閱讀 292評(píng)論 0 3