var xmlHttp; // 1. 聲明變量
xmlHttp = GetXmlHttpObject(); // 2. 調用函數獲取 XMLHttpRequest 實例
function GetXmlHttpObject() {
var xmlHttp = null;
// 現代瀏覽器 (IE7+, Firefox, Chrome, Safari, Opera)
if (window.XMLHttpRequest) {
xmlHttp = new XMLHttpRequest();
}
// 古老 IE (IE5/IE6) 使用 ActiveXObject
else if (window.ActiveXObject) {
try {
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {}
}
}
return xmlHttp;
}
var ajax = GetXmlHttpObject(); // 同樣合法
var xhr = GetXmlHttpObject(); // 現代常用簡寫 (XMLHttpRequest)
var request = GetXmlHttpObject(); // 任意合法標識符
xmlHttp 無特殊含義,只是「XML + HTTP」的縮寫慣例命名。
// 不需要封裝函數,現代瀏覽器通用
const xhr = new XMLHttpRequest();
// 或使用 Fetch API(更現代、基於 Promise)
fetch('/api/data')
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error(error));
function sendRequest(url, callback) {
const xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState === 4) { // 請求完成
if (xhr.status === 200) { // HTTP 成功
callback(null, xhr.responseText);
} else {
callback(new Error('HTTP ' + xhr.status));
}
}
};
xhr.open('GET', url, true); // 異步
xhr.send();
}
// 使用
sendRequest('/api/users', function(err, data) {
if (err) return console.error(err);
console.log(JSON.parse(data));
});
GetXmlHttpObject() 是**兼容舊版 IE 的工廠函數**,返回 XMLHttpRequest 實例new XMLHttpRequest()** 或 fetch()xmlHttp 無特殊語義,可隨意命名readyState/status/onreadystatechange 異步回調模式