跳轉到

1999:IE 5 首創 XMLHttpRequest#

事件#

1999年3月,微軟在 Internet Explorer 5 中以 ActiveX 元件形式推出 XMLHTTP(開發者後來稱 XMLHttpRequest / XHR)。它是微軟 Outlook Web Access 團隊(Alex Hopmann 等人)為了讓 Web 版 Outlook 能「不換頁就收發郵件」而創造的。

為何重要#

  • 史上第一個「不換頁就能向伺服器取得資料」的瀏覽器 API:在此之前,任何伺服器互動都必須整頁重新載入。
  • 微軟以 IE 專屬 ActiveX 形式實作(new ActiveXObject("Microsoft.XMLHTTP")),其他瀏覽器要等到 2006年 才以 XMLHttpRequest 原生物件跟進(Firefox 1.0、Safari 1.2 等)。
  • 它是七年後 Ajax 革命(2005) 的技術基礎(見 2005-Ajax革命)——Jesse James Garrett 命名 "Ajax" 時的核心就是這個物件。

理論與實用原因#

  • 理論原因:突破「HTTP 請求 = 整頁換新」的 Web 基本模型,實現「局部更新」(partial page update)——應用程式思維(desktop-like)進入瀏覽器。
  • 實用原因:Outlook Web Access 若每次收信都要整頁重載,體驗完全無法與桌面 Outlook 競爭;Exchange 團隊需要「背景取回 XML 資料」的能力。

彌補了什麼缺陷#

彌補了 Web「每個互動都要整頁重載、無法做局部非同步更新」的根本缺陷。諷刺的是,這個改變 Web 命運的 API 是 IE 專屬擴充策略的產物——微軟沒有標準化它,最終反被開放實作(其他瀏覽器)與 Ajax 生態(主要建立在 Firefox/Chrome 上)收割了成果。

相關條目#

程式範例#

IE 5 的 XMLHTTP:史上第一次「不換頁取得伺服器資料」:

// 1999年,IE 5 專屬:ActiveX 元件
var xhr = new ActiveXObject("Microsoft.XMLHTTP");
xhr.open("GET", "/inbox.xml", true);  // true = 非同步
xhr.onreadystatechange = function () {
  if (xhr.readyState === 4) {          // 4 = 完成
    var doc = xhr.responseXML;         // XML 要透過 DOM API 層層取出
    var subject = doc.getElementsByTagName("subject")[0].firstChild.nodeValue;
    updateInbox(subject);              // 局部更新,不換頁!
  }
};
xhr.send();

六年後其他瀏覽器的標準化版本(2006):

var xhr = new XMLHttpRequest();        // 原生物件,不用 ActiveX
xhr.open("GET", "/inbox.json", true);
xhr.onload = function () {
  var data = JSON.parse(xhr.responseText);  // JSON 直接是物件(2001 後)
  updateInbox(data.subject);
};
xhr.send();

注意 1999 版的兩個缺陷:ActiveX 偵測分支 + XML 需透過 DOM 解析——後來分別由標準化 XHR 與 JSON 解決。