Ajax的初步使用

Ajax的初步使用

定義(來自MDN)

(異步JavaScript和XML)Asynchronous JavaScript + XML, 其本身不是一種新技術(shù)妙真,而是一個在 2005年被Jesse James Garrett提出的新術(shù)語朽缴,用來描述一種使用現(xiàn)有技術(shù)集合的‘新’方法凶朗,包括: HTML or XHTML, Cascading Style Sheets, JavaScript, The Document Object Model, XML, XSLT, 以及最重要的 XMLHttpRequest object洞难。當(dāng)使用結(jié)合了這些技術(shù)的AJAX模型以后, 網(wǎng)頁程序能夠快速地將漸步更新呈現(xiàn)在用戶界面上快耿,不需要重載(刷新)整個頁面盏袄。這使得程序能夠更快地回應(yīng)用戶的操作。

盡管X在Ajax中代表XML, 但由于JSON的許多優(yōu)勢葱她,比如更加輕量以及作為Javascript的一部分撩扒,目前JSON的使用比XML更加普遍。JSON和XML都被用于在Ajax模型中打包信息吨些。

XMLHttpRequest對象

XMLHttpRequest對象充當(dāng)著瀏覽器中的腳本(客戶端)與服務(wù)器之間的中間人角色搓谆。JS通過這個對象可以自己發(fā)送請求,同時也自己處理響應(yīng)锤灿。

XHR對象在IE中可能會遇到MSXML2.XMLHttp挽拔、MSXML2.XMLHttp.3.0、MSXML2.XMLHttp.6.0三個不同版本(IE7以前)但校。IE7+螃诅、Firefox、Opera、Chrome和Safari都支持原生的XHR對象术裸,在這些倘是;瀏覽器中創(chuàng)建XHR對象則用XMLHttpRequest構(gòu)造函數(shù)。

<pre class="md-fences md-end-block" cid="n12" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: Consolas, "Liberation Mono", Courier, monospace; font-size: 0.9em; white-space: pre; text-align: left; break-inside: avoid; display: block; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); position: relative !important; border: 1px solid rgb(221, 221, 221); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; color: rgb(51, 51, 51); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;" lang="javascript" contenteditable="false">function getHTTPObject() {
if (typeof XMLHttpRequest == "undefined")
XMLHttpRequest = function () {
try { return new ActiveXObject("Msxml2.XMLHTTP.6.0");}
catch (e) {}
try { return new ActiveXObject("Msxml2.XMLHTTP.3.0");}
catch (e) {}
try { return new ActiveXObject("Msxml2.XMLHTTP");}
catch (e) {}
return false;
}
return new XMLHttpRequest();
}</pre>

XHR

XHR對象第一個方法是open方法袭艺,它用來指定服務(wù)器上將要訪問的文件搀崭,指定請求類型:GET、POST猾编。

xhr.open(“get”,"example.php",false)

第一個參數(shù)是要發(fā)送的請求的類型瘤睹、第二個數(shù)請求的URL、第三個請求時表示是否異步發(fā)送請求的布爾值答倡。

<pre class="md-fences md-end-block" cid="n20" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: Consolas, "Liberation Mono", Courier, monospace; font-size: 0.9em; white-space: pre; text-align: left; break-inside: avoid; display: block; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); position: relative !important; border: 1px solid rgb(221, 221, 221); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; color: rgb(51, 51, 51); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;" lang="javascript" contenteditable="false">
function getNewContent () {
var request = getHTTPObject();
if (request) {
request.open("GET","example.txt",true);
request.onreadystatechange = function() {
if(request.readyState == 4||request.status >= 200 && request.status <300 || request.status == 304) {
var para = document.createElement("p");
var txt = document.createTextNode(request.responseText);
para.appendChild(txt);
document.getElementById('new').appendChild(para);
}
};
request.send(null);
}else {
alert('Sorry,your browser doesn`t suppor XMLHttpRequset');
}
}
addLoadEvent(getNewContent);</pre>

onreadystatechange是一個事件處理函數(shù)轰传,他會在服務(wù)器給XHR對象送回響應(yīng)的時候被處罰執(zhí)行。在這個處理函數(shù)中瘪撇,可以根據(jù)服務(wù)器的具體響應(yīng)做相應(yīng)的處理获茬。

收到響應(yīng)后,響應(yīng)數(shù)據(jù)會自動填充XHR對象的屬性倔既,相關(guān)屬性簡介如下恕曲。

  • responseText:獲得字符串形式的響應(yīng)數(shù)據(jù)。

  • responseXML:獲得 XML 形式的響應(yīng)數(shù)據(jù)渤涌。

  • status:響應(yīng)的HTTP狀態(tài)佩谣。

  • sstatusText:HTTP狀態(tài)的說明。

收到響應(yīng)后歼捏,第一部檢查status屬性稿存,已確定響應(yīng)已經(jīng)成功返回。一般來說瞳秽,將HTTP狀態(tài)代碼為200作為成功響應(yīng)的標(biāo)志。池外率翅,狀態(tài)代碼為304表示請求的資源沒有被修改练俐,可以直接使用瀏覽器中緩存的版本,意味著響應(yīng)也是有效的冕臭。

readyState屬性表示請求/響應(yīng)過程中的當(dāng)前活動階段腺晾。這個屬性可取的值如下

  • 0: 請求未初始化

  • 1: 服務(wù)器連接已建立

  • 2: 請求已接收

  • 3: 請求處理中

  • 4: 請求已完成,且響應(yīng)已就緒

通常我們只對值為4的階段感興趣辜贵,這時候所有數(shù)據(jù)已經(jīng)就緒悯蝉。

GET請求

最常用于向服務(wù)器查詢某些信息。

POST請求

通常用于向服務(wù)器發(fā)送應(yīng)該被保存的數(shù)據(jù)托慨。

Ajax的同源策略

石頭XHR對象發(fā)送的請求只能訪問與其所在的HTML處于同一域中的數(shù)據(jù)鼻由,不能向其他域發(fā)送請求。此外,游戲瀏覽器會限制Ajax請求使用的協(xié)議蕉世。例如蔼紧,Chrome中,使用file://協(xié)議從自己的硬盤里加載emample.txt文件狠轻,會看到"Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https.(跨域請求只支持HTTP協(xié)議)的錯誤消息"奸例。

XMLHttpRequest2級

FormData

表單數(shù)據(jù)的序列化。創(chuàng)建FormData()對象向楼,利用data.append()方法接受兩個參數(shù):鍵和值查吊,分別對應(yīng)表單字段的名字和字段中包含的值。

超時設(shè)定

timeout屬性湖蜕,表示請求在等待響應(yīng)多少毫秒后就終止菩貌。在設(shè)置數(shù)值后,如果在規(guī)定時間內(nèi)瀏覽器沒有收到相應(yīng)重荠,就會觸發(fā)timeout事件箭阶,進(jìn)而調(diào)用ontimeout事件處理程序。

overrideMimeType()方法

重寫XHR響應(yīng)的MIME類型

進(jìn)度事件

  • load事件

  • progress事件

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末戈鲁,一起剝皮案震驚了整個濱河市仇参,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌婆殿,老刑警劉巖诈乒,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異婆芦,居然都是意外死亡怕磨,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進(jìn)店門消约,熙熙樓的掌柜王于貴愁眉苦臉地迎上來肠鲫,“玉大人,你說我怎么就攤上這事或粮〉妓牵” “怎么了?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵氯材,是天一觀的道長渣锦。 經(jīng)常有香客問我,道長氢哮,這世上最難降的妖魔是什么袋毙? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮冗尤,結(jié)果婚禮上听盖,老公的妹妹穿的比我還像新娘胀溺。我一直安慰自己,他們只是感情好媳溺,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布月幌。 她就那樣靜靜地躺著,像睡著了一般悬蔽。 火紅的嫁衣襯著肌膚如雪扯躺。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天蝎困,我揣著相機(jī)與錄音录语,去河邊找鬼。 笑死禾乘,一個胖子當(dāng)著我的面吹牛澎埠,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播始藕,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼蒲稳,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了伍派?” 一聲冷哼從身側(cè)響起江耀,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎诉植,沒想到半個月后祥国,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡晾腔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年舌稀,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片灼擂。...
    茶點(diǎn)故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡壁查,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出缤至,到底是詐尸還是另有隱情潮罪,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布领斥,位于F島的核電站,受9級特大地震影響沃暗,放射性物質(zhì)發(fā)生泄漏月洛。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一孽锥、第九天 我趴在偏房一處隱蔽的房頂上張望嚼黔。 院中可真熱鬧细层,春花似錦、人聲如沸唬涧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽碎节。三九已至捧搞,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間狮荔,已是汗流浹背胎撇。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留殖氏,地道東北人晚树。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像雅采,于是被迫代替她去往敵國和親爵憎。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評論 2 355

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