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

詳解XMLHTTP物件封裝技術的範例程式碼

Mar 27, 2017 pm 04:32 PM

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

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

1

2

3

4

5

6

7

8

9

10

11

  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方法,過會我們就會用到。

1

2

3

4

5

6

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方法進行傳遞的腳本例子如下:

1

2

3

4

5

6

7

8

9

/*表单提交用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

熱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

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

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

熱門話題

Java教學
1670
14
CakePHP 教程
1428
52
Laravel 教程
1329
25
PHP教程
1274
29
C# 教程
1256
24
能否用PowerPoint開啟XML文件 能否用PowerPoint開啟XML文件 Feb 19, 2024 pm 09:06 PM

XML檔可以用PPT開啟嗎? XML,即可擴展標記語言(ExtensibleMarkupLanguage),是一種廣泛應用於資料交換和資料儲存的通用標記語言。與HTML相比,XML更加靈活,能夠定義自己的標籤和資料結構,使得資料的儲存和交換更加方便和統一。而PPT,即PowerPoint,是微軟公司開發的一種用於創建簡報的軟體。它提供了圖文並茂的方

瞭解網頁重定向的常見應用場景並了解HTTP301狀態碼 瞭解網頁重定向的常見應用場景並了解HTTP301狀態碼 Feb 18, 2024 pm 08:41 PM

掌握HTTP301狀態碼的意思:網頁重定向的常見應用場景隨著網路的快速發展,人們對網頁互動的要求也越來越高。在網頁設計領域,網頁重定向是一種常見且重要的技術,透過HTTP301狀態碼來實現。本文將探討HTTP301狀態碼的意義以及在網頁重新導向中的常見應用場景。 HTTP301狀態碼是指永久重新導向(PermanentRedirect)。當伺服器接收到客戶端發

HTTP 200 OK:了解成功回應的意義與用途 HTTP 200 OK:了解成功回應的意義與用途 Dec 26, 2023 am 10:25 AM

HTTP狀態碼200:探索成功回應的意義與用途HTTP狀態碼是用來表示伺服器回應狀態的數字代碼。其中,狀態碼200表示請求已成功被伺服器處理。本文將探討HTTP狀態碼200的具體意義與用途。首先,讓我們來了解HTTP狀態碼的分類。狀態碼分為五個類別,分別是1xx、2xx、3xx、4xx和5xx。其中,2xx表示成功的回應。而200是2xx中最常見的狀態碼

您如何在PHP中解析和處理HTML/XML? 您如何在PHP中解析和處理HTML/XML? Feb 07, 2025 am 11:57 AM

本教程演示瞭如何使用PHP有效地處理XML文檔。 XML(可擴展的標記語言)是一種用於人類可讀性和機器解析的多功能文本標記語言。它通常用於數據存儲

如何使用 PHP 函數處理 XML 資料? 如何使用 PHP 函數處理 XML 資料? May 05, 2024 am 09:15 AM

使用PHPXML函數處理XML資料:解析XML資料:simplexml_load_file()和simplexml_load_string()載入XML檔案或字串。存取XML資料:利用SimpleXML物件的屬性和方法來取得元素名稱、屬性值和子元素。修改XML資料:使用addChild()和addAttribute()方法新增元素和屬性。序列化XML資料:asXML()方法將SimpleXML物件轉換為XML字串。實戰案例:解析產品饋送XML,提取產品信息,轉換並將其儲存到資料庫中。

如何使用C++實作HTTP流傳輸? 如何使用C++實作HTTP流傳輸? May 31, 2024 am 11:06 AM

如何在C++中實現HTTP流傳輸?使用Boost.Asio和asiohttps客戶端程式庫建立SSL流套接字。連接到伺服器並發送HTTP請求。接收HTTP響應頭並列印它們。接收HTTP回應正文並列印它。

對於HTTP請求逾時會回傳哪種狀態碼? 對於HTTP請求逾時會回傳哪種狀態碼? Feb 18, 2024 pm 01:58 PM

HTTP請求逾時,伺服器端常常會回傳504GatewayTimeout狀態碼。此狀態碼表示伺服器在執行某個請求時,經過一段時間後仍未能取得到請求所需的資源或完成請求的處理。它是5xx系列的狀態碼,表示伺服器端遇到了臨時的問題或過載,導致無法正確處理客戶端的請求。在HTTP協定中,各種狀態碼都有特定的意義和用途,而504狀態碼則用來表示請求逾時問題。在客戶

XML 解析的 Java 函式庫比較:尋找最佳解決方案 XML 解析的 Java 函式庫比較:尋找最佳解決方案 Mar 09, 2024 am 09:10 AM

簡介XML(可擴展標記語言)是一種用於儲存和傳輸資料的流行格式。在Java中解析XML是許多應用程式的必要任務,從資料交換到文件處理。為了有效地解析XML,開發人員可以使用各種Java函式庫。本文將比較一些最受歡迎的XML解析函式庫,重點放在它們的特性、功能和效能,以幫助開發人員做出明智的選擇。 DOM(文件物件模型)解析函式庫JavaXMLDOMAPI:由oracle提供的標準DOM實作。它提供了一個物件模型,允許開發人員存取和操作XML文件。 DocumentBuilderFactoryfactory=D

See all articles