什么是AJAX?


騰訊視頻

什么是Ajax?

AJAX即“Asynchronous JavaScript and XML”(異步的JavaScript與XML技術),指的是一套綜合了多項技術的 瀏覽器端網(wǎng)頁開發(fā)技術。Ajax的工作原理相當于在用戶和服務器之間加了一個中間層(ajax引擎),使用戶操作 與服務器響應異步化。并不是所有的用戶請求都提交給服務器,像—些數(shù)據(jù)驗證(比如判斷用戶是否輸入了數(shù) 據(jù))和數(shù)據(jù)處理(比如判斷用戶輸入數(shù)據(jù)是否是數(shù)字)等都交給Ajax引擎自己來做, 只有確定需要從服務器讀取 新數(shù)據(jù)時再由Ajax引擎代為向服務器提交請求。把這些交給了Ajax引擎,用戶操作起來也就感覺更加流暢了。 傳統(tǒng)的網(wǎng)頁(不使用 Ajax)如果需要更新內(nèi)容,必須重載整個網(wǎng)頁頁面。


傳統(tǒng)的請求方式

傳統(tǒng)的web應用程序中,用戶向服務器發(fā)送一個請求,然后等待,服務器接受到用戶的請求然后響應。在這段時間內(nèi),用戶會傻乎乎 的盯著一個空白頁面看。這是因為以往的傳輸方式為同步處理方式。長久以來我們對這種web交互模式已經(jīng)習慣了,并且以使用者的角度來講已經(jīng)覺得是理所當然的事情了。


Ajax的工作方式

和傳統(tǒng)的web應用不同,Ajax采取了異步交互避免了用戶請求-等待-應答交互方式的缺點。 Ajax在應用程序和服務器中引入了一個中間層---Ajax引擎,它是用Javascript編寫的,在一個隱藏的框架中運行。Ajax引擎負責呈現(xiàn)用戶界面, 以及代表用戶和服務器進行交互。Ajax引擎允許用戶和服務器進行異步的交互。用戶無需傻乎乎的盯著空白頁面。


針對Ajax會有幾個常見問題

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

2、跨域問題

3、Ajax亂碼問題

4、Ajax對象屬性的大小寫問題

5、Ajax狀態(tài)為0的問題

第一個問題,緩存問題:

在IE瀏覽器下面使用get請求時,如果第一次請求了數(shù)據(jù)之后IE會自動緩存數(shù)據(jù),如果下一次再發(fā)送同樣的 請求的時候瀏覽器會自動先去找緩存顯示出來,所以如果請求的數(shù)據(jù)有變化的時候,這里是看不到變化的。 解決辦法:xhr.open("get","xxxx.aspx?_dc="+new Date().getTime(),true);就是在請求的后面 加上_dc=。。。讓url變成唯一,或者是,改成post請求。

第二個問題,跨域問題:

這是我們目前見到的最多的,也是最熟悉的一個問題。本地上面直接采用Nginx跨域?qū)崿F(xiàn)。在服務器上的話,交給后端吧。。。 注意 Nginx跨域可以同時配置多個接口的,就是多寫幾個location就好了,然后location后面帶的參數(shù)不一樣就可以了。


第三個問題: Ajax亂碼問題

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

第四個問題:Ajax對象屬性的大小寫問題,有些瀏覽器比如火狐,對大小寫是敏感的,if (xhr.readystate==4)這種寫法, 在IE下是成立的,但是在ff下就行不通了,因為IE不區(qū)分大小寫,ff是區(qū)分大小的。標準寫法為if (xhr.readyState==4),同理還有屬性 responseText,responseXML。習慣采用駝峰形式的寫法可以避免這個問題。

第五個問題:Ajax狀態(tài)0的問題,有時候在測試Ajax代碼的時候加了 xhr.status==200的判斷后,一直不執(zhí)行xhr.status==200的代碼, 這個就需要注意了。xhr.status==200是要通過服務器確認后來返回的,在服務器頁面沒有發(fā)生錯誤或者轉(zhuǎn)向時才返回200狀態(tài)的, 此狀態(tài)和你通過瀏覽器訪問頁面時服務器定義的狀態(tài)一致。這個我們提前就跟后端對接好了,問題也不大。


可以使用jQuery和ang

jQuery方法


AngularJS方法


Javascript原生方法

HTTP請求的方法或動作,ajax請求方式 ("POST"或"GET"), 默認為"GET"。注意:其它 HTTP 請求方法,

如 PUT 和 DELETE 也可以使用,但僅部分瀏覽器支持。

你需要請求的URL,總得告訴服務器請求的地址是什么吧?

請求頭,包含一些客戶端環(huán)境信息,身份驗證信息等

請求體,也就是請求正文,請求正文中可以包含客戶端提交的查詢字符串信息,表單信息等等.

then()方法與其他兩種方法的主要區(qū)別是,它會接收到完整的響應對象,信息更為全面,而success()和error()則會對響應對象進行析構,使用起來更為方便。


最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 大家好,我是IT修真院深圳分院第3期的學員,一枚正直純潔善良的前端程序員,今天給大家分享一下,修真院官網(wǎng)前端工程師...
    大大頭大閱讀 8,089評論 1 72
  • 大家好,我是IT修真院成都分院第7期的學員韓建名,一枚正直純潔善良的WEB前端程序員。 目錄 1.背景介紹 2.知...
    inh_閱讀 451評論 0 0
  • 1.背景介紹 什么是Ajax? AJAX即“Asynchronous JavaScript and XML”(異步...
    我叫于搞吧閱讀 361評論 0 0
  • 大家好,我是IT修真院北京總院第21期的學員楊夢桐,今天這篇文章主要總結(jié)了ajax的內(nèi)容 1. 什么是Ajax A...
    AmaYang閱讀 409評論 0 0
  • 大家好,我是IT修真院深圳分院第01期學員,一枚正直純潔善良的web程序員。 今天給大家分享一下,修真院官網(wǎng)js任...
    嘴角那抹溫柔閱讀 818評論 0 1

友情鏈接更多精彩內(nèi)容