xmlhttp

xmlhttp

浏覽器對象
Xmlhttp是一種浏覽器對象,可用于模拟http的GET和POST請求。配合JavaScript可以實現頁面數據在無刷新下的定時數據更新,如果應用在聊天室、文字直播上可以取得較好的視覺效果。
    中文名:XmlHttpRequest 外文名:XMLHTTP 所屬學科:計算機科學與技術 用于 :模拟http的GET和POST請求

簡介

Xmlhttp是一種浏覽器對象, 可用于模拟http的GET和POST請求。配合JavaScript可以實現頁面數據在無刷新下的定時數據更新,如果應用在聊天室、文字直播上可以取得較好的視覺效果。

IE中的 XmlHttp對象

在IE中XmlHttp被實現為ActiveX對象,通常使用

var xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");

來創建一個對象,然後使用該對象的open方法來發出一個Http請求。

xmlhttp.open("GET", fragment_url);

這時候浏覽器已經發出了Http請求,我們需要注冊一個匿名函數給XmlHttp對象的onreadystatechange方法,這樣當請求返回時,xmlhttp就會自動調用我們注冊的這個函數,下邊是一個實際的例子。

例子

xmlhttp.onreadystatechange = function()

{

if (xmlhttp.readyState == 4 && xmlhttp.status == 200)

{

element.innerHTML = xmlhttp.responseText;

}

}

因為我們不需要再發送任何信息,所以用下邊的語句結束

xmlhttp.send(null);

我們将上邊的過程封裝為一個函數,下邊是這個函數的完整代碼:

function loadFragmentInToElement(fragment_url, element_id)

{

var element = document.getElementById(element_id);

var xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");

xmlhttp.open("GET", fragment_url);

xmlhttp.onreadystatechange = function()

{

if (xmlhttp.readyState == 4 && xmlhttp.status == 200)

{

element.innerHTML = xmlhttp.responseText;

}

}

xmlhttp.send(null);

PHPMORE VOL5 24/26

}

函數的調用方法如下所示:

loadFragmentInToElement( http://domain.com/url.php, DynamicContent_id );

有了上邊的代碼, 再配合JavaScript的定時函數, 我們就可以實現定時的無刷新數據更新了, 下邊這個函數每隔5秒對element_id

的數據進行一次更新。

function refresh( element_id )

{

loadFragmentInToElement( show.php , + element_id );

setTimeout( "refresh(ts)" , 5000 );

}

在 IE上使用XmlHttp要注意的問題

特别要注意的是由于IE的Cache的關系,我們看見的XmlHttp并不總是最新讀取的那一個,為了讓IE不啟用Cache,我們發送給

IE一個特殊的Header,用PHP實現如下:

header( "Expires: Mon, 26 Jul 1997 05:00:00 GMT" );

header( "Last-Modified: " . gmdate( "D, d M Y H:i:s" ) . "GMT" );

header( "Cache-Control: no-cache, must-revalidate" );

header( "Pragma: no-cache" );

XmlHttp對象在Gecko上的實現

Gecko上的XmlHttp和IE上略有不同,它并不需要通過ActiveX來創建。另外回調函數必須在open方法之前注冊,而IE并不要

求,這是一個很需要注意的問題。

使用JavaScript實現XmlHttp的跨浏覽器應用

為了能在多種浏覽器上有一個統一的實現, 我們可以用JavaScript來對不同浏覽器的差異進行封裝。 這裡我們采用Andrew Gregory

的實現。首先我們要引用Andrew Gregory的一個名為xmlhttprequest.js的Js腳本。

然後在創建XmlHttp對象時統一使用new XMLHttpRequest()就可以了; 其它的方法不用改變。 這個Js腳本運行我們在IE、 Gecko

(Mozilla/FireFox) 和Opera的特定版本使用XmlHttp。下邊是調整後的loadFragmentInToElement函數, 這個函數在IE6

和FireFox1.0pre上運行通過。

xmlhttprequest.js文件和具體的使用例子可以在我寫的一個DEMO中找到。

XmlHttp中的中文亂碼問題

在默認情況下,XmlHttp都是使用Utf-8字符集,而我們使用的多是GB2312字符集,這就要求我們進行GB2312到Utf-8的轉碼。

PHP提供了一個可選的專碼模塊,可以實現多種字符集之間的相互轉化。加載這個專碼模塊的方法如下:

打開 PHP 配置文件 php.ini,将 ;extension=php_mbstring.dll(*nix 是 php_mbstring.so) 前的分号去掉。重新啟動

Apache以後,這個模塊就可以使用了。如果有錯誤出現,請檢查擴展目錄的路徑設置是否正确。

加載這個模塊以後,我們就可以使用mb_convert_encoding函數來轉碼了:

$utf8_string = mb_convert_encoding( $gb_string , UTF-8 , GB2312 );

将轉碼後的字符輸出就可以看見正确顯示的中文

相關詞條

相關搜索

其它詞條