XMLHTTP
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( , 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 );
將轉碼後的字元輸出就可以看見正確顯示的中文[@more@]
新,如果應用在聊天室、文字直播上可以取得較好的視覺效果。
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( , 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 );
將轉碼後的字元輸出就可以看見正確顯示的中文[@more@]
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7558084/viewspace-1004411/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- XMLHTTP物件參考XMLHTTP物件
- xmlhttp的問題,盼望解答XMLHTTP
- AJAX 非同步(JavaScript 和 XMLHTTP)非同步JavaScriptXMLHTTP
- 用.Net處理xmlHttp傳送非同步請求XMLHTTP非同步
- 通過javascript+xmlhttp獲取itpub blog列表JavaScriptXMLHTTP
- 利用XMLHTTP 從其他頁面獲取資料 (轉)XMLHTTP
- 原生js如何建立相容所有瀏覽器的xmlhttp物件JS瀏覽器XMLHTTP物件
- 用XMLHTTP實現無重新整理的與server通訊XMLHTTPServer
- 用xmlhttp傳送登出請求到伺服器的程式碼怎麼寫?XMLHTTP伺服器
- 用過XMLHTTP的朋友幫幫忙,我這個點選後沒反應XMLHTTP
- 使用XMLHttp和ADODB.Stream取得遠端檔案並儲存到本地 (轉)XMLHTTP
- jsp與xmlhttp在IE5.0中出現亂碼!請大家幫幫忙!JSXMLHTTP
- 用XMLHTTP Post/Get HTML頁面時的中文亂碼問題之完全Script解決方案 (轉)XMLHTTPHTML
- 當XMLHTTP返回的XML資料流中沒有資料時怎麼樣進行異常處理?XMLHTTP