什么是ajax?

1.背景介紹

什么是AJAX莲趣?

即異步的 JavaScript 和 XML鸳慈,是一種用于創(chuàng)建快速動態(tài)網(wǎng)頁的技術(shù); 傳統(tǒng)的網(wǎng)頁(不使用 AJAX)如果需要更新內(nèi)容喧伞,必需重載整個網(wǎng)頁面走芋。 使用AJAX則不需要加載更新整個網(wǎng)頁,實現(xiàn)部分內(nèi)容更新潘鲫;

2.知識剖析

具體來說翁逞,AJAX包括以下幾個步驟。

創(chuàng)建AJAX對象

發(fā)出HTTP請求

接收服務(wù)器傳回的數(shù)據(jù)

更新網(wǎng)頁數(shù)據(jù)

xmlhttprequest對象的用法

? ? ? ? ? ? ? ? xhr.open("get","ajax_info.txt",false);

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


send方法接受一個數(shù)據(jù)溉仑,即要作為請求主體的數(shù)據(jù)挖函。如果不需要請求主體發(fā)回數(shù)據(jù),則傳回null浊竟; 收到響應(yīng)后數(shù)據(jù)會填入xhr對象的屬性:

responseText:作為響應(yīng)主體被返回的文本

responseXML:如果響應(yīng)的內(nèi)容類型是“text/xml”或者“application/xml” 這個屬性中就保存包含著響應(yīng)數(shù)據(jù)的XML DOM文檔

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

statusText:HTTP狀態(tài)說明

在收到響應(yīng)后怨喘,第一步先確定status屬性,用來確定是否返回成功(狀態(tài)為200)振定; responseText屬性就準(zhǔn)備就緒哲思,此外,狀態(tài)碼304表示請求的資源沒有被修改吩案; 但一般為了確保接受到適當(dāng)?shù)捻憫?yīng)還需要檢測上面兩種狀態(tài)碼棚赔;

? ? ? ? ? ? ? ? ? ? ? ? ? function sendAjax() {

? //構(gòu)造表單數(shù)據(jù)

? var formData = new FormData();

? formData.append('username', 'johndoe');

? formData.append('id', 123456);

? //創(chuàng)建xhr對象

? var xhr = new XMLHttpRequest();

? //設(shè)置xhr請求的超時時間

? xhr.timeout = 3000;

? //設(shè)置響應(yīng)返回的數(shù)據(jù)格式

? xhr.responseType = "text";

? //創(chuàng)建一個 post 請求,采用異步

? xhr.open('POST', '/server', true);

? //注冊相關(guān)事件回調(diào)處理函數(shù)

? xhr.onload = function(e) {

? ? if(this.status == 200||this.status == 304){

? ? ? ? alert(this.responseText);

? ? }

? };

? xhr.ontimeout = function(e) { ... };

? xhr.onerror = function(e) { ... };

? xhr.upload.onprogress = function(e) { ... };

? //發(fā)送數(shù)據(jù)

? xhr.send(formData);

}


3.常見問題

1、IE瀏覽器下面的緩存問題

2靠益、跨域問題

3丧肴、Ajax亂碼問題

4、使用post提交的時候需要設(shè)置content-type為"application/x-www-form-urlencoded"

5胧后、Ajax對象屬性的大小寫問題

6芋浮、Ajax狀態(tài)為0的問題

4.解決方法

1. 緩存問題

在IE瀏覽器下面使用get請求時,如果第一次請求了數(shù)據(jù)之后IE會自動緩存數(shù)據(jù)壳快,如果下一次再發(fā)送同樣的 請求的時候瀏覽器會自動先去找緩存顯示出來纸巷,所以如果請求的數(shù)據(jù)有變化的時候,這里是看不到變化的眶痰。

解決辦法:

xhr.open("get","xxxx.aspx?_dc="+new Date().getTime(),true);

就是在請求的后面 加上時間戳或是隨機數(shù)瘤旨,讓url變成唯一,或者是竖伯,改成post請求存哲。 (get和post請求的區(qū)別可參見?淺談HTTP中Get與Post的區(qū)別

2. 跨域問題

這是我們目前見到的最多的,也是最熟悉的一個問題七婴。本地上面直接采用Nginx跨域?qū)崿F(xiàn)祟偷。在服務(wù)器上實現(xiàn)跨域,可以通過后端達(dá)成打厘,可參考?跨域有幾種處理方式修肠??注意 Nginx跨域可以同時配置多個接口的,就是多寫幾個location就好了户盯,然后location后面帶的參數(shù)不一樣就可以了嵌施。

3. Ajax亂碼問題

亂碼問題雖然我們目前遇到的不多,但是也屬于比較常見的一個問題了先舷。出現(xiàn)的主要原因就是編碼不一致導(dǎo)致的艰管。 如果出現(xiàn)亂碼問題了,首先檢查一下meta聲明的charset要和請求的頁面返回的charset一致蒋川。response.charset="gb2312 or utf-8"

4. 使用post提交的時候需要進行的設(shè)置?

? ? ? ? ? ? ? ? ? ? ? ? ? content-Type: application/x-www-form-urlencoded;

? ? ? ? ? ? ? ? ? ? ? ? ? //jQuery中牲芋,

? ? ? ? ? ? ? ? ? ? ? ? ? content-Type: application/x-www-form-urlencoded;charset=utf-8;

? ? ? ? ? ? ? ? ? ? ? ? ? //AngularJS中$http

? ? ? ? ? ? ? ? ? ? ? ? ? content-Type: application/json; charset=utf-8;

? ? ? ? ? ? ? ? ? ? ? ? ? //使用原生Ajax需要在open以后才能使用xhr.setRequestHeader()方法,否則出錯

? ? ? ? ? ? ? ? ? ? ? ? ? xhr.open("post","xxxx.aspx",true);

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

? ? ? ? ? ? ? ? ? ? ? ? ? //用原生寫時必須在open()方法之后send()方法之前調(diào)用


5. Ajax對象屬性的大小寫問題?

有些瀏覽器比如火狐捺球,對大小寫是敏感的缸浦,if (xhr.readystate==4)這種寫法, 在IE下是成立的氮兵,但是在Firefox下就行不通了裂逐,因為IE不區(qū)分大小寫,F(xiàn)irefox是區(qū)分大小的泣栈。標(biāo)準(zhǔn)寫法為if (xhr.readyState==4)卜高,同理還有屬性 responseText弥姻,responseXML。習(xí)慣采用駝峰形式的寫法可以避免這個問題掺涛。

6. Ajax狀態(tài)0的問題

有時候在測試Ajax代碼的時候加了 xhr.status==200的判斷后庭敦,一直不執(zhí)行xhr.status==200的代碼输枯, 這個就需要注意了铅鲤。xhr.status==200是要通過服務(wù)器確認(rèn)后來返回的慈迈,在服務(wù)器頁面沒有發(fā)生錯誤或者轉(zhuǎn)向時才返回200狀態(tài)的括授, 此狀態(tài)和你通過瀏覽器訪問頁面時服務(wù)器定義的狀態(tài)一致。直接拖進瀏覽器瀏覽結(jié)果或者雙擊運行html頁面的践瓷,未發(fā)生錯誤時分衫,此時的xhr.status是0据德,不是200减拭。

5蔽豺、編碼實戰(zhàn)

6、擴展思考

AJAX的優(yōu)缺點

get與post

ajax的優(yōu)點:

最大的一點是頁面無刷新峡谊,用戶的體驗非常好茫虽。

使用異步方式與服務(wù)器通信刊苍,具有更加迅速的響應(yīng)能力既们。

可以把以前一些服務(wù)器負(fù)擔(dān)的工作轉(zhuǎn)嫁到客戶端,利用客戶端閑置的能力來處理正什, 減輕服務(wù)器和帶寬的負(fù)擔(dān)啥纸,節(jié)約空間和寬帶租用成本。并且減輕服務(wù)器的負(fù)擔(dān)婴氮, ajax的原則是“按需取數(shù)據(jù)”斯棒,可以最大程度的減少冗余請求,和響應(yīng)對服務(wù)器造成的負(fù)擔(dān)主经。

基于標(biāo)準(zhǔn)化的并被廣泛支持的技術(shù)荣暮,不需要下載插件或者小程序。

ajax可使因特網(wǎng)應(yīng)用程序更小罩驻、更快穗酥,更友好。

ajax的缺點:

ajax不支持瀏覽器back按鈕惠遏。

安全問題 AJAX暴露了與服務(wù)器交互的細(xì)節(jié)砾跃。

對搜索引擎的支持比較弱。

破壞了程序的異常機制节吮。

不容易調(diào)試抽高。

GET - 從指定的資源請求數(shù)據(jù)。 POST - 向指定的資源提交要被處理的數(shù)據(jù)

GET 請求可被緩存 GET 請求保留在瀏覽器歷史記錄中 GET 請求可被收藏為書簽 GET 請求不應(yīng)在處理敏感數(shù)據(jù)時使用 GET 請求有長度限制 GET 請求只應(yīng)當(dāng)用于取回數(shù)據(jù)

POST 請求不會被緩存 POST 請求不會保留在瀏覽器歷史記錄中 POST 不能被收藏為書簽 POST 請求對數(shù)據(jù)長度沒有要求

7透绩、參考文獻(xiàn):

參考一:《JavaScript高級編程設(shè)計》

參考二:?AJAX -- JavaScript 標(biāo)準(zhǔn)參考教程(alpha)——阮一峰

8翘骂、更多討論

AJAX適用場景有哪些壁熄?

Ajax適用場景

表單驅(qū)動的交互

深層次的樹的導(dǎo)航

快速的用戶與用戶間的交流響應(yīng)

類似投票、yes/no等無關(guān)痛癢的場景

對數(shù)據(jù)進行過濾和操縱相關(guān)數(shù)據(jù)的場景

普通的文本輸入提示和自動完成的場景

Ajax不適用場景

部分簡單的表單

搜索

基本的導(dǎo)航

替換大量的文本

對呈現(xiàn)的操縱

問題:

1.常用的跨域方法有哪些碳竟?

答:請點擊

2.同步請求和異步請求的區(qū)別请毛?

答:請點擊

3.ajax應(yīng)用場景?

答:表單驅(qū)動的交互

深層次的樹的導(dǎo)航

快速的用戶與用戶間的交流響應(yīng)

類似投票瞭亮、yes/no等無關(guān)痛癢的場景

對數(shù)據(jù)進行過濾和操縱相關(guān)數(shù)據(jù)的場景

普通的文本輸入提示和自動完成的場景

Ajax不適用場景

部分簡單的表單

搜索

基本的導(dǎo)航

替換大量的文本

對呈現(xiàn)的操縱

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末方仿,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子统翩,更是在濱河造成了極大的恐慌仙蚜,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,110評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件厂汗,死亡現(xiàn)場離奇詭異委粉,居然都是意外死亡,警方通過查閱死者的電腦和手機娶桦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評論 3 395
  • 文/潘曉璐 我一進店門贾节,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人衷畦,你說我怎么就攤上這事栗涂。” “怎么了祈争?”我有些...
    開封第一講書人閱讀 165,474評論 0 356
  • 文/不壞的土叔 我叫張陵斤程,是天一觀的道長。 經(jīng)常有香客問我菩混,道長忿墅,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,881評論 1 295
  • 正文 為了忘掉前任沮峡,我火速辦了婚禮疚脐,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘邢疙。我一直安慰自己棍弄,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,902評論 6 392
  • 文/花漫 我一把揭開白布秘症。 她就那樣靜靜地躺著照卦,像睡著了一般。 火紅的嫁衣襯著肌膚如雪乡摹。 梳的紋絲不亂的頭發(fā)上役耕,一...
    開封第一講書人閱讀 51,698評論 1 305
  • 那天,我揣著相機與錄音聪廉,去河邊找鬼瞬痘。 笑死故慈,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的框全。 我是一名探鬼主播察绷,決...
    沈念sama閱讀 40,418評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼津辩!你這毒婦竟也來了拆撼?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,332評論 0 276
  • 序言:老撾萬榮一對情侶失蹤喘沿,失蹤者是張志新(化名)和其女友劉穎闸度,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蚜印,經(jīng)...
    沈念sama閱讀 45,796評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡莺禁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,968評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了窄赋。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片哟冬。...
    茶點故事閱讀 40,110評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖忆绰,靈堂內(nèi)的尸體忽然破棺而出浩峡,到底是詐尸還是另有隱情,我是刑警寧澤较木,帶...
    沈念sama閱讀 35,792評論 5 346
  • 正文 年R本政府宣布红符,位于F島的核電站青柄,受9級特大地震影響伐债,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜致开,卻給世界環(huán)境...
    茶點故事閱讀 41,455評論 3 331
  • 文/蒙蒙 一峰锁、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧双戳,春花似錦虹蒋、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至塘辅,卻和暖如春晃虫,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背扣墩。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評論 1 272
  • 我被黑心中介騙來泰國打工哲银, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留扛吞,地道東北人。 一個月前我還...
    沈念sama閱讀 48,348評論 3 373
  • 正文 我出身青樓荆责,卻偏偏與公主長得像滥比,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子做院,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,047評論 2 355

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

  • 大家好,我是IT修真院深圳分院第3期的學(xué)員郁竟,一枚正直純潔善良的前端程序員玛迄,今天給大家分享一下,修真院官網(wǎng)前端工程師...
    大大頭大閱讀 7,675評論 1 72
  • ??2005 年,Jesse James Garrett 發(fā)表了一篇在線文章讥蟆,題為“Ajax: A new App...
    霜天曉閱讀 893評論 0 1
  • 大家好瘸彤,我是IT修真院鄭州分院王姣妍修然,一枚正直、純潔质况、善良的web程序員愕宋。 今天給大家分享一下,修真院官網(wǎng) js任...
    初晨曬暖心閱讀 440評論 0 1
  • 大家好结榄,我是IT修真院成都分院第7期的學(xué)員韓建名中贝,一枚正直純潔善良的WEB前端程序員。 目錄 1.背景介紹 2.知...
    inh_閱讀 345評論 0 0
  • 1.背景介紹 什么是Ajax臼朗? AJAX即“Asynchronous JavaScript and XML”(異步...
    我叫于搞吧閱讀 327評論 0 0