搜尋
首頁後端開發XML/RSS教程詳解XMLHTTP物件封裝技術的範例程式碼

ajax技術的實作主要依賴xmlhttprequest,但我們在呼叫其來進行非同步資料的傳輸時,由於xmlhttp是個短線過程(處理事件完成後就銷毀)如果不對該物件進行包裝處理的話,就不得不在需要呼叫的地方重新建構xmlhttprequest,每次呼叫都要寫一大段的程式碼,實在不是個好辦法。還好現在很多開源的ajax框架都提供了xmlhttp封裝的方案。這裡以ajaxtags自帶的prototype-1.4.0.js為母版,來看看如何將xmlhttp物件封裝成一個可重複使用的方法。

在prototype.js中,首先定義了一個變數:Ajax

  var Ajax = {
    getTransport: function() {
     return Try.these(
      function() {return new ActiveXObject('Msxml2.XMLHTTP')},
      function() {return new ActiveXObject('Microsoft.XMLHTTP')},
      function() {return new XMLHttpRequest()}
    ) || false;
  },
   
   activeRequestCount: 0
}

變數傳回了一個xmlhttprequest,可以看到,如果我們呼叫了Ajax.getTransport(),每次都會回傳一個新的xmlhttprequest物件。

在Ajax變數中定義了一個基礎方法Ajax.Base和該基礎方法的原型(初始時,每個腳本方法預設都有個空的原型,該原型會繼承Object的原型,如果我們在Object中改變了原型,則所有的腳本方法都會被改變。實現重載。

Ajax.Base原型中最主要的是setOptions方法,過會我們就會用到。

setOptions: function(options) {
   this.options = {
    method:    'post',
    asynchronous: true,
    parameters:  ''
   }

prototype中對request是透過定義Ajax.Request原型(Ajax.Request.prototype)來實現的。但我們並不能直接對Ajax.Request進行調用,主要原因是Ajax.Request並沒有提供一個統一處理的過程。而且我們可能需要透過request 再取得response。 (試想一下,客戶那邊發出一條訊息,都始終沒與收到回复,那是會讓人覺得很惱火的事~),prototype同樣為我們封裝好了resoponse(Ajax.Responders),但兩者都是相互獨立的,如何把他們整合呢?

在prototype中給我們提供了兩個方案,一個是Ajax.Updater,另一個是Ajax.PeriodicalUpdater,兩個共同點都是必須傳入3個參數:

#container :

response資料要傳達的位置,該位置透過html標籤的id來定義,例如你要把返回的資料輸出到html中的某個<div>中,則只要把container改成該id的值就可以了。如果找不到該container,則會發生腳本錯誤。

url:

request請求要傳遞的目的地。這個目的地應該是個servlet或jspservlet,因為request物件只能被servlet中的do***方法自動取得。

options:

結構應該與上面Ajax.Base定義的setOptions()中的option結構相同,如果為空或不寫,則採用Ajax.Base定義的初始值(沒有傳遞任何參數時使用)。

兩者的差異在與Ajax.Updater回傳給container的是完整的responseText,只有在responseText完全取得又沒發生異常時才會把內容寫到container裡面,而PeriodicalUpdater在取得responseText時,不管是否已經完整取得,就把內容填進container,直到發生異常或完全取得responseText。大多數情況應該使用第一種方法,因為第一種方法在發生異常時會把異常訊息顯示在container裡面,而第二種就不一定了。

既然已經把xmlhttp封裝好了,我們只需要設定好前面所說的3個參數就可以了,要注意的是,設定options參數,一定要按照base中的options結構進行設置,如果我們使用post方法,還可以在opitons中設定postBody屬性,把要傳遞的queryString 放到body中,一個使用post方法進行傳遞的腳本例子如下:

/*表单提交用post方法*/
function doRequest(container,paraments,url){
   var options ={
    method:    'post',
    asynchronous: true,
    postBody: paraments
   };
   new Ajax.Updater(container,url,options);  
}

最後不得不說的是中文編碼問題,prototype對傳遞的參數都進行了編碼轉換工作,每個傳遞值透過encodeURIComponent 進行了處理.編碼會轉換成utf-8,在背景取得request時,應該統一使用request.setCharacterEncoding("UTF-8")對request設定編碼,而不必管頁面的編碼格式是什麼.如果使用post方法進行傳遞數據,則會自動執行:

request. setHeader('Content-type','application/x-www-form-urlencoded').確保傳遞資料編碼格式的正確.

以上是詳解XMLHTTP物件封裝技術的範例程式碼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
掌握良好的XML:數據交換的最佳實踐掌握良好的XML:數據交換的最佳實踐May 14, 2025 am 12:05 AM

良好形式的XMliscrucialfordAtaExchangeBecapeparsingSiturscrectparsingandSundStandingAcrossystem.1)startwithAdeClarationLike.2)確保everyveryopentingtaghasaclopingtaghasaclosingtagosingtagandelementsareproproproproproperlynested.3)

XML:它仍然使用嗎?XML:它仍然使用嗎?May 13, 2025 pm 03:13 PM

Xmlisstillusedduetoitsstructusednature,人類可讀性,以及範圍的addionindererpriseEnvormentments.1)itfacilitatesdataexchangeInsectInsectorlikeFinance(swift)andHealthCare(hl7)和hl7)

RSS文檔的解剖結構:結構和元素RSS文檔的解剖結構:結構和元素May 10, 2025 am 12:23 AM

RSS文檔的結構包括三個主要元素:1.:根元素,定義RSS版本;2.:包含頻道信息,如標題、鏈接、描述;3.:代表具體的內容條目,包含標題、鏈接、描述等。

了解RSS文檔:綜合指南了解RSS文檔:綜合指南May 09, 2025 am 12:15 AM

RSS文檔是一種簡便的訂閱機制,通過XML文件發佈內容更新。 1.RSS文檔結構由和元素組成,包含多個。 2.使用RSS閱讀器訂閱頻道,並通過解析XML提取信息。 3.高級用法包括使用feedparser庫進行過濾和排序。 4.常見錯誤包括XML解析和編碼問題,調試時需驗證XML格式和編碼。 5.性能優化建議包括緩存RSS文檔和異步解析。

RSS,XML和現代網絡:內容聯合深度潛水RSS,XML和現代網絡:內容聯合深度潛水May 08, 2025 am 12:14 AM

RSS和XML在現代Web中依然重要。 1.RSS用於發布和分發內容,用戶可通過RSS閱讀器訂閱並獲取更新。 2.XML作為標記語言,支持數據存儲和交換,RSS文件基於XML。

基礎知識超越:XML啟用的高級RSS功能基礎知識超越:XML啟用的高級RSS功能May 07, 2025 am 12:12 AM

RSS可以實現多媒體內容嵌入、條件訂閱、以及性能和安全性優化。 1)通過標籤嵌入多媒體內容,如音頻和視頻。 2)使用XML命名空間實現條件訂閱,允許訂閱者根據特定條件篩選內容。 3)通過CDATA節和XMLSchema優化RSSFeed的性能和安全性,確保穩定性和符合標準。

解碼RSS:Web開發人員的XML底漆解碼RSS:Web開發人員的XML底漆May 06, 2025 am 12:05 AM

RSS是一種基於XML的格式,用於發布常更新的數據。作為Web開發者,理解RSS能提升內容聚合和自動化更新能力。通過學習RSS結構、解析和生成方法,你將能自信地處理RSSfeeds,優化Web開發技能。

JSON與XML:為什麼RSS選擇XMLJSON與XML:為什麼RSS選擇XMLMay 05, 2025 am 12:01 AM

RSS選擇XML而不是JSON是因為:1)XML的結構化和驗證能力優於JSON,適合RSS複雜數據結構的需求;2)XML當時有廣泛的工具支持;3)RSS早期版本基於XML,已成標準。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具