Ajax實戰:XMLDocument和XMLHttpRequest對象

來源:互聯網
上載者:User

正如剛才看到的,我們可以使用IFrame以後台方式請求資料,但是這從本質上來說不過是一種hack式的臨時解決方案。最初引入IFrame的設計意圖是在頁面上顯示可見的內容,這種用法歪曲了這個意圖。在流行的Web瀏覽器的更新版本中,引入了專門為非同步資料轉送而設計的對象,我們將會看到,它比IFrame用起來要方便得多。

XmlDocument和XMLHttpResuest對象並不是Web瀏覽器中DOM的標準擴充,它們只是碰巧得到了多數瀏覽器的支援。它們的設計目標很明確,就是用來以後台方式擷取資料,這使得發出非同步呼叫的業務使用起來非常流暢。兩個對象都是源自微軟私人的ActiveX組件,可以在IE瀏覽器中作為JavaScript對象來訪問。其他的瀏覽器則依照相似的功能和API調用實現了自己的原生對象。兩個對象執行的功能很相似,不過XMLHttpRequest可以更加精細地對請求進行控制。在本書中,我們將主要使用XMLHttpRequest,在這裡我們簡要介紹一下XmlDocument,以便你瞭解這個對象與XMLHttpRequest有哪些不同。代碼清單2-8展示了一段簡單建立XmlDocument對象的代碼。

代碼清單2-8 getXmlDocument()函數

在大多數現代瀏覽器中,這個函數都能返回一個具有相同API的XmlDocument對象,儘管在不同的瀏覽器中建立文檔的方式有很大不同。

這段代碼檢查文檔對象是否支援建立一個原生的XmlDocument對象所需的implementation屬性(在最近的Mozilla和Safari瀏覽器中都可以找到這個屬性)。如果沒有找到,它將測試瀏覽器是否支援ActiveX對象(只有微軟的瀏覽器才能夠支援),如果支援,它將嘗試定位一個合適的對象。這段指令碼優先使用較新一些的第二版MSXML庫。

注意 檢查瀏覽器的廠商和版本號碼資訊,並且使用這些資訊來開發用於不同瀏覽器的分支代碼,是一種很常見的做法。在我們看來,這種做法容易導致錯誤,因為它無法預期瀏覽器的未來版本,並且還會將有能力執行這段指令碼的瀏覽器排除在外。在getXmlDocument()函數中,我們沒有儘力去猜測瀏覽器的版本,而是直接檢查特定的對象是否可用。這個方法也稱作對象檢測(object detection),可以更容易地支援瀏覽器未來的版本,以及那些我們沒有明確測試過的不常見的瀏覽器,通常這會使得代碼更加健壯。

代碼清單2-9的代碼採用與前面的代碼類似的方式獲得XMLHttpRequest對象,不過略微簡單一些。

代碼清單2-9 getXmlHttpRequest()函數

同樣地,我們使用對象檢測來測試是否支援原生的XMLHttpRequest對象,如果不支援,再測試是否支援ActiveX對象。在兩者都不支援的瀏覽器中,我們簡單地返回null。如何更加優雅地處理失敗的情況呢?這個問題我們留到第6章再來更加詳細地探討。

我們已經建立了向伺服器發送請求的對象,下面我們用它來做什麼呢?

相關文章

聯繫我們

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