掌握Ajax,第7部分: 在請求和響應中使用XML

來源:互聯網
上載者:User

瞭解什麼時候適合什麼時候不適合使用 XML

簡介:偶爾使用 Ajax 的開發人員也會注意到 Ajax 中的 x 並意識到它代表 XML。XML 是編程中最常 用的資料格式之一,對於非同步應用程式中的伺服器響應能夠帶來切實的好處。在本文中,您將看到伺服器 如何在請求響應中發送 XML。

現在如果不使用 XML 就不能進行任何有意義的編程。無論考慮轉向 XHTML 的網頁設計人員、使用 JavaScript 的 Web 程式員、使用部署描述檔案和資料繫結的伺服器端程式員,還是研究基於 XML 的數 據庫的後端開發人員,都在使用這種可延伸標記語言 (XML)。因此,XML 被認為是 Ajax 底層的核心技術之一就 不足為奇了。

但是,這種觀點反映到 Ajax 應用程式就表現在其核心對象所選的名稱 —— XMLHttpRequest,這個 名稱不是很好,因為它並沒有反映技術上的實際情況。換句話說,多數人之所以認為 XML 是 Ajax 的核 心組成部分,僅僅是因為他們想當然地以為 XMLHttpRequest 對象在任何時候都使用 XML。但實情並非如 此,本文第一部分給出了原因。實際上,您將看到在多數 Ajax 應用程式中 XML 很少出現。

XML 確實有應用在 Ajax 中,而且 XMLHttpRequest 也支援這種用法。也確實沒有什麼能阻擋您向服 務器發送 XML。在本系列前面的文章中,我們使用普通文本和名/值參數發送資料,但 XML 也是一種可行 的格式。本文將介紹如何來這樣做。但最重要的是,我將討論為何可以使用 XML 作為請求格式,以及為 何在多數情況下不應該使用它。

XML:到底用沒用?

對 Ajax 應用程式及它們使用 XML 的情況很容易犯想當然的錯誤:這種技術的名稱(Ajax)及其使用 的核心對象(XMLHttpRequest)都暗示了 XML 的使用,談到 Ajax 應用程式的時候也經常聽到 XML。但 是,這種觀點大錯特錯,如果希望在編寫非同步應用程式時真正做到胸有成竹,必須知道這種想法是錯誤的 ,而且最好知道為什麼錯誤。

XMLHttpRequest:糟糕的名稱和 HTTP

一項技術可能遇到的最糟的境況之一是它變得太炙手可熱以至於無法再改變它的一些基本內容。 XMLHttpRequest 恰恰是這種情形,它是 Ajax 應用程式中使用的基本對象。聽起來它似乎是為通過 HTTP 要求發送 XML 或者以某種 XML 格式發出 HTTP 要求而設計的。但不論這個對象的名稱聽起來像什麼,實 際上它要做的只不過是為客戶機代碼(在網頁中通常是 JavaScript)提供一種發送 HTTP 要求的方式。 僅此而已,別無其他。

因此,如果將 XMLHttpRequest 改成某種更準確的名稱可能更好一些,比如 HttpRequest,或者簡簡 單單的 Request。但是,現在成千上萬的人在應用程式中使用了 Ajax,而且我們知道需要幾年時間(如 果不是十幾年的話)大部分使用者才會改用 Internet Explorer 7.0 或 Firefox 1.5 這些新版本的瀏覽器 ,因此這麼修改實際上是不可行的。最終我們不得不使用 XMLHttpRequest,這就要求開發人員要知道其 名不符實的這一事實。

在一定程度上講,對於不支援 XMLHttpRequest 的瀏覽器(特別是在 Windows 上)的最佳回溯方法之 一就是使用 Microsoft IFRAME 對象。聽起來可不像是 XML、HTTP 或請求,是不是?當然,所有這些都 可能涉及到,但是這正清楚地說明了一點 —— XMLHttpRequest 對象更多的是關於在不重新載入頁面的 情況發出請求,而不會太多地涉及 XML 甚至 HTTP。

請求是 HTTP 而非 XML

另一種常見的錯誤是認為 XML 在幕後使用 —— 坦白地說,我也曾這麼認為!但是,持這種觀點表明 您對這種技術還不甚瞭解。當使用者開啟瀏覽器從伺服器上請求網頁時,會輸入 http://www.google.com 或者 http://www.headfirstlabs.com 這樣的東西。即便不輸入 http://,瀏覽器也會在地址欄的這部分 加上。第一部分,即 http://,是關於如何通訊的很直觀的線索:通過超文字傳輸通訊協定 (HTTP) HTTP。在網頁中 編寫代碼與伺服器通訊時,無論使用 Ajax 還是普通的表單 POST,甚至超連結,打交道的都是 HTTP。

既然瀏覽器和伺服器之間的所有 Web 通訊都通過 HTTP 進行,認為 XML 是 XMLHttpRequest 幕後所 用的某種傳輸技術的想法就毫無道理了。當然在 HTTP 要求中可以發送 XML,但是 HTTP 是一個精確定義 的協議,短時間內不可能消失。除了在請求中明確使用 XML,或者伺服器用 XML 發送響應之外, XMLHttpRequest 對象使用的只是普普通通的 HTTP。因此,當再有人對您說 “哦,稱為 XMLHttpRequest 是因為在幕後使用 XML” 的時候,您最好一笑了之,並耐心地解釋什麼是 HTTP,告訴他們雖然 XML 可 以通過 HTTP 發送,但 XML 是一種資料格式而不是傳輸協議。通過這樣的討論,加深對它的理解。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.