Ajax===阿賈克斯棘劣?武器大師?當然不是了楞遏,在我看來是一門藝術

一茬暇、什么是Ajax?

Ajax= 異步JavaScript和XML。

Ajax是一種用于創(chuàng)建快速動態(tài)網(wǎng)頁的技術寡喝。

通過在后臺與服務器進行少量數(shù)據(jù)交換糙俗,Ajax可以使網(wǎng)頁實現(xiàn)異步更新。這意味著可以在不重新加載整個網(wǎng)頁的情況下预鬓,對網(wǎng)頁的某部分進行更新巧骚。

傳統(tǒng)的網(wǎng)頁(不使用 Ajax)如果需要更新內容,必需重載整個網(wǎng)頁面格二。

有很多使用Ajax的應用程序案例:新浪微博劈彪、Google 地圖、開心網(wǎng)等等顶猜。

(注意:Ajax不是一種新的編程語言沧奴,而是一種用于創(chuàng)建更好更快以及交互性更強的Web應用程序的技術。)

二长窄、Ajax工作原理

三滔吠、ajax的使用及實現(xiàn)步驟

(1) 創(chuàng)建XMLHttpRequest對象,也就是創(chuàng)建一個異步調用對象.

(2) 創(chuàng)建一個新的HTTP請求,并指定該HTTP請求的方法远寸、URL及驗證信息.

(3)設置響應HTTP請求狀態(tài)變化的函數(shù).

(4)發(fā)送HTTP請求.

(5)獲取異步調用返回的數(shù)據(jù).

(6)使用JavaScript和DOM實現(xiàn)局部刷新.

以下步驟,如果不能理解你死記硬背都要記下來屠凶,總比你答不出來要好吧!

??1.創(chuàng)建Ajax核心對象XMLHttpRequest

varxmlHttp;if(window.XMLHttpRequest){//針對除IE6以外的瀏覽器xmlHttp=newXMLHttpRequest();//實例化一個XMLHttpRequest}else{? xmlHttp=newActiveXObject("Microsoft.XMLHTTP");//針對IE5,IE6}

??2.向服務器發(fā)送請求

xmlhttp.open(method,url,async);xmlhttp.send();

示例如下:

varxmlHttp =newXMLHttpRequest();? xmlHttp.open('get','demo_get.html','true');//調用open()方法并采用異步方式xmlHttp.send();//使用open()方法將請求發(fā)送出去xmlHttp.onreadystatechange()=>{if(xmlHttp.readyState ===4&& xmlHttp.status ===200){? ? ? ? ? }}

onreadystatechange事件可指定一個事件處理函數(shù)來處理XMLHttpRequest對象的執(zhí)行結果肆资。

四矗愧、詳解區(qū)分請求類型:GET 或 POST

方法描述

open(method,url,async)規(guī)定請求的類型、URL 以及是否異步處理請求郑原。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??? method:請求的類型:GET 或 POST唉韭;??? url:文件在服務器上的位置,相對位置或絕對位置;?? ? async:true(異步)或 false(同步)

send(string)將請求發(fā)送到服務器犯犁。string:僅用于 POST 請求

?GET 還是 POST属愤?

????與 POST 相比,GET 更簡單也更快酸役,并且在大部分情況下都能用住诸。

?然而,在以下情況中涣澡,請使用 POST 請求:

無法使用緩存文件(更新服務器上的文件或數(shù)據(jù)庫)

向服務器發(fā)送大量數(shù)據(jù)(POST 沒有數(shù)據(jù)量限制)

發(fā)送包含未知字符的用戶輸入時贱呐,POST 比 GET 更穩(wěn)定也更可靠

GET 請求

一個簡單的 GET 請求:

xmlHttp.open("GET","demo_get.html",true); xmlHttp.send();

??在上面的例子中,您可能得到的是緩存的結果入桂。

為了避免這種情況奄薇,請向 URL 添加一個唯一的 ID

xmlhttp.open("GET","demo_get.html?t="+Math.random(),true); xmlhttp.send();

如果您希望通過 GET 方法發(fā)送信息,請向 URL 添加信息:

xmlhttp.open("GET","demo_get2.html?fname=Henry&lname=Ford",true); xmlhttp.send();

提示:GET請求具有以下的幾個特點:

GET 請求可被緩存

GET 請求保留在瀏覽器歷史記錄中

GET 請求可被收藏為書簽

GET 請求不應在處理敏感數(shù)據(jù)時使用

GET 請求有長度限制

GET 請求只應當用于取回數(shù)據(jù)

POST 請求

一個簡單 POST 請求:

xmlhttp.open("POST","demo_post.html",true); xmlhttp.send();

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

xmlhttp.open("POST","ajax_test.html",true); xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded"); xmlhttp.send("fname=Henry&lname=Ford");

方法描述

setRequestHeader(header,value)向請求添加 HTTP頭????? header: 規(guī)定頭的名稱;????? ? value: 規(guī)定頭的值

提示:POST請求的特點如下:

POST 請求不會被緩存

POST 請求不會保留在瀏覽器歷史記錄中

POST 請求不能被收藏為書簽

POST 請求對數(shù)據(jù)長度沒有要求

為什么使用 Async=true? ?

我們的實例在 open() 的第三個參數(shù)中使用了 "true"蜘腌。該參數(shù)規(guī)定請求是否異步處理沫屡。True 表示腳本會在 send() 方法之后繼續(xù)執(zhí)行,而不等待來自服務器的響應逢捺。

onreadystatechange事件使代碼復雜化了谁鳍。但是這是在沒有得到服務器響應的情況下,防止代碼停止的最安全的方法劫瞳。

通過把該參數(shù)設置為 "false"倘潜,可以省去額外的 onreadystatechange 代碼。如果在請求失敗時是否執(zhí)行其余的代碼無關緊要志于,那么可以使用這個參數(shù)涮因。

五、Ajax中的一些處理

服務器響應處理

responseText? ? 獲得字符串形式的響應數(shù)據(jù)伺绽。

responseXML? 獲得XML 形式的響應數(shù)據(jù)养泡。

同步處理

xmlHttp.open("GET","demo_get.html",false);? xmlHttp.send();document.getElementById("target").innerHTML=xmlHttp.responseText;

??直接在send()后面處理返回來的數(shù)據(jù)嗜湃。

異步處理

? 異步處理相對比較麻煩,要在請求狀態(tài)改變事件中處理澜掩。

xmlHttp.onreadystatechange=function(){//接收到服務端響應時觸發(fā)if(xmlHttp.readyState==4&&xmlHttp.status==200){document.getElementById("target").innerHTML=xmlHttp.responseText;? ? ? }}

下面是 XMLHttpRequest 對象的三個重要的屬性:

屬性描述

onreadystatechange存儲函數(shù)(或函數(shù)名)购披,每當 readyState 屬性改變時,就會調用該函數(shù)肩榕。

readyState存有 XMLHttpRequest 的狀態(tài)刚陡。從 0 到 4 發(fā)生變化。????? 0: 請求未初始化株汉;????? 1: 服務器連接已建立筐乳;???? ? 2: 請求已接收;????? 3: 請求處理中乔妈;?? ??? 4: 請求已完成蝙云,且響應已就緒

status? 200: "OK" ; ? 404: 未找到頁面

在onreadystatechange·事件中路召,我們規(guī)定當服務器響應已做好被處理的準備時所執(zhí)行的任務勃刨。

當 readyState 等于 4 且狀態(tài)為 200 時,表示響應已就緒:

xmlhttp.status:響應狀態(tài)碼优训。這個也是面試比較愛問的朵你,這個必須知道4個以上(把上面兩個狀態(tài)碼也列到下邊了),比較常見的有:

200: "OK"

304:該資源在上次請求之后沒有任何修改(這通常用于瀏覽器的緩存機制揣非,使用GET請求時尤其需要注意)抡医。

403? (禁止) 服務器拒絕請求。

404? (未找到) 服務器找不到請求的網(wǎng)頁早敬。

408? (請求超時) 服務器等候請求時發(fā)生超時忌傻。

500? (服務器內部錯誤)? 服務器遇到錯誤,無法完成請求搞监。

作者:懿左左

鏈接:http://www.reibang.com/p/d6a84fe5f656

來源:簡書

簡書著作權歸作者所有水孩,任何形式的轉載都請聯(lián)系作者獲得授權并注明出處。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末琐驴,一起剝皮案震驚了整個濱河市俘种,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌绝淡,老刑警劉巖宙刘,帶你破解...
    沈念sama閱讀 211,561評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異牢酵,居然都是意外死亡悬包,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評論 3 385
  • 文/潘曉璐 我一進店門馍乙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來布近,“玉大人垫释,你說我怎么就攤上這事〕徘疲” “怎么了棵譬?”我有些...
    開封第一講書人閱讀 157,162評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長预伺。 經(jīng)常有香客問我茫船,道長,這世上最難降的妖魔是什么扭屁? 我笑而不...
    開封第一講書人閱讀 56,470評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮涩禀,結果婚禮上料滥,老公的妹妹穿的比我還像新娘。我一直安慰自己艾船,他們只是感情好葵腹,可當我...
    茶點故事閱讀 65,550評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著屿岂,像睡著了一般践宴。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上爷怀,一...
    開封第一講書人閱讀 49,806評論 1 290
  • 那天阻肩,我揣著相機與錄音,去河邊找鬼运授。 笑死烤惊,一個胖子當著我的面吹牛,可吹牛的內容都是我干的吁朦。 我是一名探鬼主播柒室,決...
    沈念sama閱讀 38,951評論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼逗宜!你這毒婦竟也來了雄右?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,712評論 0 266
  • 序言:老撾萬榮一對情侶失蹤纺讲,失蹤者是張志新(化名)和其女友劉穎擂仍,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體刻诊,經(jīng)...
    沈念sama閱讀 44,166評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡防楷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,510評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了则涯。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片复局。...
    茶點故事閱讀 38,643評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡冲簿,死狀恐怖,靈堂內的尸體忽然破棺而出亿昏,到底是詐尸還是另有隱情峦剔,我是刑警寧澤,帶...
    沈念sama閱讀 34,306評論 4 330
  • 正文 年R本政府宣布角钩,位于F島的核電站吝沫,受9級特大地震影響,放射性物質發(fā)生泄漏递礼。R本人自食惡果不足惜惨险,卻給世界環(huán)境...
    茶點故事閱讀 39,930評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望脊髓。 院中可真熱鬧辫愉,春花似錦、人聲如沸将硝。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽依疼。三九已至痰腮,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間律罢,已是汗流浹背膀值。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留误辑,地道東北人虫腋。 一個月前我還...
    沈念sama閱讀 46,351評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像稀余,于是被迫代替她去往敵國和親悦冀。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,509評論 2 348