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

來源:互聯網
上載者:User

Ajax 客戶機/伺服器通訊可以很巧妙

簡介:在 本系列的上一篇文章 中,您看到了 Ajax 應用程式如何以 XML 格式化發往伺服器的請求。 還瞭解了為什麼這在大多數情況下並不是一個好主意。這篇文章主要探討在大多數情況下確實是 好主意 的一種做法:向客戶機返回 XML 響應。

我其實並不喜歡寫那種主要告訴您什麼不應該 做的文章。很多時候,那都會是一篇非常愚蠢的文章。 我要在前半篇文章中解釋某些東西,然後在後半篇文章中說明使用您剛剛才學會的那種技術是一個多麼糟 糕的主意。在很大程度上,上一期文章正是這樣一種情況(如果您錯過了那一期文章,請查看 參考資料 中的連結),那篇文章教您如何將 XML 作為 Ajax 應用程式的請求資料格式使用。

但願這篇文章能夠彌補您花費在學習 XML 請求上的時間。在 Ajax 應用程式中,使用 XML 作為發送 資料的格式的理由很少,但使伺服器向 客戶機回傳 XML 的理由很多。因此,您在上一篇文章中學到的關 於 XML 的知識最終將在這篇文章中體現出某些價值。

伺服器(有時)不能響應太多的請求

在深入鑽研從伺服器擷取 XML 響應的技術之前,您需要理解,為什麼說使伺服器發送 XML 來響應請 求是一個好主意(以及這與客戶機發送 XML 請求不同的原因所在)。

客戶機以成對的名稱和數值發送請求

回憶一下上一篇文章,就會知道,在大多數情況下,客戶機不需要使用 XML,因為他們會使用名稱/值 對發送請求。因此,您可能會發送一個這樣的名稱:name=jennifer。只需簡單地在連續的成對的名稱和數值之間 添加一個 “與” 符號(&),即可將其放在一起,就像這樣:name=jennifer&job=president。 使用簡單的文本和這些名稱值對,客戶機即可輕鬆向伺服器請求多個值。很少需要用到 XML 提供的額外 結構(及其帶來的額外開銷)。

實際上,需要向伺服器發送 XML 的所有理由都差不多可以歸入以下兩個基本的類別中:

伺服器僅 接受 XML 請求。在這類情況下,您別無選擇。上一期文章中介紹的基礎知識應已使您掌握 了發送此類請求所必需的工具。

您正在調用一個僅接受 XML 或 SOAP 請求的遠程 API。這實際上就是上一種情況的特例,但值得單獨 拿出來提一下。如果您希望在一個非同步請求中使用來自 Google 或 Amazon 的 API,就會有一些特殊的考 慮事項。在下一期的文章中,我將介紹這些考慮事項,還會給出一些向 API 發送此類請求的樣本。

伺服器無法(以一種標準方式)發送成對的名稱和數值

在您發送成對的名稱和數值時,網頁瀏覽器會發送 請求,平台會響應該請求,並承載一個伺服器程式,配合它將那些成對的名稱和數值轉換成伺服器程式可以輕鬆 處理的資料。實際上,每一種伺服器端技術 —— 從 Java™ servlet 到 PHP、再到 Perl、Ruby on Rails —— 都允許您調用多種方法來根據名稱擷取值。因此,擷取 name 屬 性只是小事一樁。

這種情況並不會將我們引向另外一個方向。如果伺服器使用字串 name=jennifer&job=president 應答一個應用程式,客戶機沒有任何標準化的簡便方法來將每個對拆 分成名稱和值。您必須手動解析所返回的資料。如果伺服器返回一個由成對的名稱和數值構成的響應,這樣的響 應的解釋難度與使用分號、豎線或其他任何非標準格式化字元相同。

對於您來說,這就意味沒有 任何簡單的方法在響應中使用純文字、使客戶機以一種標準的方法擷取並解釋響應,至少在響應包含多個 值時是如此。假設您的伺服器只是要發回數字 42,那麼純文字是很好的選擇。但如果伺服器要一次性發 回電視劇 Lost, Alias 和 Six Degrees 的近期收視率又該怎麼辦呢?儘管可以選擇許多種方法來使用純 文本發送這一響應(清單 1 給出了一些樣本),但沒有一種是不需客戶機進行某些處理的極其簡單的方 法,也沒有一種是標準化的方法。

清單 1. 收視率的伺服器響應(不同版本)

show=Alias&ratings=6.5|show=Lost&ratings=14.2|show=Six% 20Degrees&ratings=9.1
Alias=6.5&Lost=14.2&Six%20Degrees=9.1
Alias|6.5|Lost|14.2|Six%20Degrees|9.1

儘管不難找到拆分這些響應字串的方法,但客戶機將不得不根據分號、等號、豎線和與符號解析並 拆分這些字串。這不是編寫使其他開發人員能夠輕鬆理解和維護的健壯代碼的方法。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.