IE 早期版本使用 ActiveXObject (Microsoft.XMLHTTP, Msxml2.XMLHTTP),現代瀏覽器支援標準 XMLHttpRequest。需撰寫相容函式自動偵測並建立正確物件。
function getXMLHttpRequest() {
var xmlhttp;
if (window.XMLHttpRequest) { // 標準瀏覽器: Firefox, Chrome, Safari, IE7+
try {
xmlhttp = new XMLHttpRequest();
xmlhttp.overrideMimeType("text/html;charset=UTF-8"); // 強制 UTF-8
} catch (e) {}
} else if (window.ActiveXObject) { // IE6 及舊版
var versions = [
"Msxml2.XMLHTTP.6.0",
"Msxml2.XMLHTTP.3.0",
"Msxml2.XMLHTTP",
"Microsoft.XMLHTTP"
];
for (var i = 0; i < versions.length; i++) {
try {
xmlhttp = new ActiveXObject(versions[i]);
break;
} catch (e) {}
}
}
return xmlhttp;
}
function ajaxRequest(url, callback) {
var xhr = getXMLHttpRequest();
if (!xhr) { alert("瀏覽器不支援 AJAX"); return; }
xhr.onreadystatechange = function() {
if (xhr.readyState === 4) {
if (xhr.status === 200) callback(xhr.responseText);
else callback(null, "HTTP " + xhr.status);
}
};
xhr.open("GET", url, true);
xhr.send(null);
}
// 呼叫
ajaxRequest("api/data", function(text, err) {
if (err) console.error(err);
else console.log("收到:", text);
});
Msxml2.XMLHTTP.6.0:Vista/IE7+ 內建,效能最好、支援完整 HTTP 標準。Msxml2.XMLHTTP.3.0:XP SP2+ 內建,廣泛相容。Microsoft.XMLHTTP:最舊版本,僅作最後備援。新專案建議直接使用 fetch() API 或 axios、jQuery.ajax 等成熟庫,僅在維護舊專案或極度輕量環境需手寫相容層。