xmlhttp

xmlhttp

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

基本介紹

  • 外文名:XMLHTTP
  • 性質瀏覽器對象
  • 用於:模擬http的GET和POST請求
XmlHttp對象介紹,在 IE上使用XmlHttp要注意的問題,實現XmlHttp的跨瀏覽器套用,XmlHttp的中文亂碼問題,

XmlHttp對象介紹

在IE中XmlHttp被實現為ActiveX對象,通常使用var xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");也可以使用var xmlhttp = createobject("MiCROSOFT.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);
varxmlhttp = 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並不要求,這是一個很需要注意的問題。

實現XmlHttp的跨瀏覽器套用

為了能在多種瀏覽器上有一個統一的實現, 我們可以用JavaScript來對不同瀏覽器的差異進行封裝。 這裡我們採用Andrew Gregory的實現。首先我們要引用Andrew Gregory的一個名為xmlhttprequest.js的Js腳本。
然後在創建XmlHttp對象時統一使用new XMLHttpRequest()就可以了; 其它的方法不用改變。 這個Js腳本運行我們在IE、 Gecko(Mozilla/FireFox) 和Opera的特定版本使用XmlHttp。下邊是調整後的loadFragmentInToElement函式, 這個函式在IE6和FireFox1.0pre上運行通過。

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 );
將轉碼後的字元輸出就可以看見正確顯示的中文

相關詞條

熱門詞條

聯絡我們