Ajax基礎(chǔ) --- XMLHttpRequest

AJAX = Asynchronous JavaScript and XML(異步的 JavaScript 和 XML)。AJAX 是一種用于創(chuàng)建快速動(dòng)態(tài)網(wǎng)頁(yè)的技術(shù)别凹。

通過(guò)在后臺(tái)與服務(wù)器進(jìn)行少量數(shù)據(jù)交換,AJAX 可以使網(wǎng)頁(yè)實(shí)現(xiàn)異步更新画机。這意味著可以在不重新加載整個(gè)網(wǎng)頁(yè)的情況下摊沉,對(duì)網(wǎng)頁(yè)的某部分進(jìn)行更新。
傳統(tǒng)的網(wǎng)頁(yè)(不使用 AJAX)如果需要更新內(nèi)容哲嘲,必需重載整個(gè)網(wǎng)頁(yè)面。

基礎(chǔ)知識(shí):

IE7+,Firefox,Chrome,Safari 以及 Opera 均內(nèi)建 XMLHttpRequest 對(duì)象媳禁。

1)創(chuàng)建 XMLHttpRequest 對(duì)象的語(yǔ)法:

variable = new XMLHttpRequest();
老版本的IE(IE5 和 IE6)使用ActiveX對(duì)象:
variable = new ActiveXObject("Microsoft.XMLHTTP");
為了應(yīng)對(duì)所有的現(xiàn)代瀏覽器眠副,包括IE5和IE6,請(qǐng)檢查瀏覽器是否支持XMLHttpRequest對(duì)象竣稽。如果支持囱怕,則創(chuàng)建XMLHttpRequest對(duì)象。
如果不支持毫别,則創(chuàng)建ActiveXObject:

var xmlhttp;
if( window.XMLHttpRequest ) {
    // code for IE7+,Firefox,chrome,Opera,Safari
    xmlhttp = new XMLHttpRequest();
}else{
    // code for IE6,IE5
    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
2)向服務(wù)器發(fā)送請(qǐng)求

XMLHttpRequest對(duì)象的 open() 和 send() 方法:
xmlhttp.open('GET',"test1.txt",true); // open(method,url,async) 規(guī)定請(qǐng)求的類型娃弓,URL以及是否異步處理請(qǐng)求。async= true (異步) 或async = false(同步)

GET 還是 POST岛宦?
與POST 相比台丛,GET 更簡(jiǎn)單也更快,并且在大部分情況下都能用砾肺。
然而挽霉,在以下情況中,請(qǐng)使用POST請(qǐng)求:
a. 無(wú)法使用緩存文件(更新服務(wù)器上的文件或數(shù)據(jù)庫(kù));
b. 向服務(wù)器發(fā)送大量數(shù)據(jù)(POST 沒(méi)有數(shù)據(jù)量限制);
c. 發(fā)送包含未知字符的用戶輸入時(shí)变汪,POST 比 GET 更穩(wěn)定也更可靠

例子:

一個(gè)簡(jiǎn)單的 GET 請(qǐng)求:
xmlhttp.open("GET","demo_get.asp",true);
xmlhttp.send();

上面例子中侠坎,可能得到是緩存的結(jié)果。
為了避免這種情況裙盾,可以向 URL 添加一個(gè)唯一的ID:

xmlhttp.open("GET","demp_get.asp?t="+ Math.random(),true);
xmlhttp.send();
一個(gè)簡(jiǎn)單的post請(qǐng)求:
xmlhttp.open("POST","demp_post.asp",true);
xmlhttp.close();

如果需要像 HTML 表單那樣 POST 數(shù)據(jù)实胸,使用 setRequestHeader() 添加 HTTP 頭他嫡。然后在 send() 方法中規(guī)定希望發(fā)送的數(shù)據(jù):

xmlhttp.open("POST","ajax_test.asp",true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send("fname=Bill&lname=Gates");
Async = true

當(dāng)使用async = true 時(shí),請(qǐng)規(guī)定在響應(yīng)處于 onreadystatechange 事件中的就緒狀態(tài)時(shí)執(zhí)行的函數(shù):

xmlhttp.onreadystatechange = function(){
  if( xmlhttp.readyState == 4 && xmlhttp.status == 200 ){
    document.getElementById("myDiv").innerHTML = xmlhttp.responseText;
  }
}
xmlhttp.open("GET","test1.txt",true);
xmlhttp.close();
3) 服務(wù)器響應(yīng)

如需獲取服務(wù)器的響應(yīng)庐完,可以使用XMLHttpRequest對(duì)象的 responseText 或 responseXML 屬性涮瞻。
responseText: 獲取字符串形式的響應(yīng)數(shù)據(jù)
responseXML: 獲取 XML 形式的響應(yīng)數(shù)據(jù)

例:
a. responseText  document.getElementById("myDiv").innerHTML = xmlhttp.responseText;
b. responseXML
  xmlDoc = xmlhttp.responseXML;
  txt = "";
  x = xmlDoc.getElementByTagName("ARTIST");
  for( i=0;i<x.length;i++ ){
    txt = txt + x[i].childNodes[0].nodeValue + "<br/>";
  }
  document.getElementByID("myDiv").innerHTML = txt;
onreadystatechange 事件

當(dāng)請(qǐng)求被發(fā)送到服務(wù)器時(shí),我們需要執(zhí)行一些基于響應(yīng)的任務(wù)假褪。每當(dāng)readyState 改變時(shí)署咽,就會(huì)觸發(fā) onreadystatechange 事件。
readyState 屬性存有 XMLHttpRequest 的狀態(tài)信息生音。
onreadystatechange:存儲(chǔ)函數(shù)(或函數(shù)名)宁否,每當(dāng)readyState 屬性改變時(shí),就會(huì)調(diào)用該函數(shù)缀遍。
readyState: 存有 XMLHttpRequest 的狀態(tài)慕匠。 從 0到4 發(fā)生變化。
0: 請(qǐng)求未初始化域醇。
1:服務(wù)器連接已建立台谊。
2:請(qǐng)求已接收。
3:請(qǐng)求處理中譬挚。
4:請(qǐng)求已完成锅铅,且響應(yīng)已就緒。
status: 200: 'OK'; 404: 未找到頁(yè)面减宣。

在onreadystatechange 事件中盐须,我們規(guī)定當(dāng)服務(wù)器響應(yīng)已做好被處理的準(zhǔn)備時(shí)所執(zhí)行的任務(wù)。
當(dāng)readyState 等于4 且狀態(tài)為 200 時(shí)漆腌,表示響應(yīng)已就緒:

xmlhttp.onreadystatechange = function(){
  if(xmlhttp.readyState == 4 && xmlhttp.status == 200){
    document.getElementById("myDiv").innerHTML = xmlhttp.responseText;
  }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末贼邓,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子闷尿,更是在濱河造成了極大的恐慌塑径,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件填具,死亡現(xiàn)場(chǎng)離奇詭異统舀,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)灌旧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門绑咱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)绰筛,“玉大人枢泰,你說(shuō)我怎么就攤上這事÷霖” “怎么了衡蚂?”我有些...
    開(kāi)封第一講書人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我毛甲,道長(zhǎng)年叮,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任玻募,我火速辦了婚禮只损,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘七咧。我一直安慰自己跃惫,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布艾栋。 她就那樣靜靜地躺著爆存,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蝗砾。 梳的紋絲不亂的頭發(fā)上先较,一...
    開(kāi)封第一講書人閱讀 49,166評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音悼粮,去河邊找鬼闲勺。 笑死,一個(gè)胖子當(dāng)著我的面吹牛扣猫,可吹牛的內(nèi)容都是我干的霉翔。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼苞笨,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼债朵!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起瀑凝,我...
    開(kāi)封第一講書人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤序芦,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后粤咪,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體谚中,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年寥枝,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了宪塔。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡囊拜,死狀恐怖某筐,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情冠跷,我是刑警寧澤南誊,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布身诺,位于F島的核電站,受9級(jí)特大地震影響抄囚,放射性物質(zhì)發(fā)生泄漏霉赡。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一幔托、第九天 我趴在偏房一處隱蔽的房頂上張望穴亏。 院中可真熱鬧,春花似錦重挑、人聲如沸迫肖。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)蟆湖。三九已至,卻和暖如春玻粪,著一層夾襖步出監(jiān)牢的瞬間隅津,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工劲室, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留伦仍,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓很洋,卻偏偏與公主長(zhǎng)得像充蓝,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子喉磁,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

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

  • AJAX 原生js操作ajax 1.創(chuàng)建XMLHttpRequest對(duì)象 var xhr = new XMLHtt...
    碧玉含香閱讀 3,173評(píng)論 0 7
  • ??2005 年协怒,Jesse James Garrett 發(fā)表了一篇在線文章涝焙,題為“Ajax: A new App...
    霜天曉閱讀 883評(píng)論 0 1
  • 本文詳細(xì)介紹了 XMLHttpRequest 相關(guān)知識(shí),涉及內(nèi)容: AJAX孕暇、XMLHTTP仑撞、XMLHttpReq...
    semlinker閱讀 13,613評(píng)論 2 18
  • AJAX 簡(jiǎn)介 AJAX 是一種在無(wú)需重新加載整個(gè)網(wǎng)頁(yè)的情況下,能夠更新部分網(wǎng)頁(yè)的技術(shù)妖滔。 什么是 AJAX 隧哮? A...
    孤傭閱讀 654評(píng)論 0 6
  • AJAX = Asynchronous JavaScript and XML(異步的 JavaScript 和 X...
    hx永恒之戀閱讀 6,868評(píng)論 7 135