如果選擇的瀏覽器不是 Internet Explorer,或者為非 Microsoft 瀏覽器編寫代碼,就需要使用不同的代碼。事實上就是 清單 1 所示的一行簡單代碼:
var xmlHttp = new XMLHttpRequest object;。
這行簡單得多的代碼在 Mozilla、Firefox、Safari、Opera 以及基本上所有以任何形式或方式支援 Ajax 的非 Microsoft 瀏覽器中,建立了XMLHttpRequest對象。
結合起來
關鍵是要支援所有瀏覽器。誰願意編寫一個只能用於 Internet Explorer 或者非 Microsoft 瀏覽器的應用程式呢?或者更糟,要編寫一個應用程式兩次?當然不!因此代碼要同時支援 Internet Explorer 和非 Microsoft 瀏覽器。清單 4 顯示了這樣的代碼。
清單 4. 以支援多種瀏覽器的方式建立 XMLHttpRequest 對象
/* Create a new XMLHttpRequest object to talk to the Web server */
var xmlHttp = false;
/*@cc_on @*/
/*@if (@_jscript_version >= 5)
try {
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e2) {
xmlHttp = false;
}
}
@end @*/
if (!xmlHttp && typeof XMLHttpRequest != 'undefined') {
xmlHttp = new XMLHttpRequest();
}
現在先不管那些注釋掉的奇怪符號,如@cc_on,這是特殊的 JavaScript 編譯器命令。這段代碼的核心分為三步:
1. 建立一個變數xmlHttp來引用即將建立的XMLHttpRequest對象。
2. 嘗試在 Microsoft 瀏覽器中建立該對象:
o 嘗試使用Msxml2.XMLHTTP對象建立它。
o 如果失敗,再嘗試Microsoft.XMLHTTP對象。
3. 如果仍然沒有建立xmlHttp,則以非 Microsoft 的方式建立該對象。
最後,xmlHttp應該引用一個有效XMLHttpRequest對象,無論運行什麼樣的瀏覽器。