局部更新畫面
只更新通知數、留言區、查詢結果、購物車數量,不必整頁重新整理。
AJAX 是 Asynchronous JavaScript and XML 的縮寫。 雖然名稱裡有 XML,但今天更常見的回應格式其實是 JSON。 它的核心觀念不是一個全新的通訊協定,而是:讓瀏覽器中的 JavaScript 主動發送 HTTP 請求,等伺服器回應後,再只更新需要改變的那一部分 DOM。
| 字詞 | 原本意思 | 今天應該怎麼理解 |
|---|---|---|
| Asynchronous | 非同步 | 送出請求後,頁面不必卡住或整頁刷新;等回應回來時,再執行後續更新。 |
| JavaScript | 瀏覽器端腳本 | 由頁面中的 JavaScript 主動發送請求、處理回應、更新 DOM。 |
| XML | 早期常見資料格式 | 今天多半改用 JSON,但 AJAX 這個名稱仍沿用下來。 |
只更新通知數、留言區、查詢結果、購物車數量,不必整頁重新整理。
瀏覽器能請求 JSON 資料,再由 JavaScript 決定怎麼呈現到畫面上。
即時搜尋、表單驗證、儀表板刷新、聊天室訊息載入等,都仰賴這種非同步請求模式。
使用者點按按鈕、送出表單或輸入文字後,瀏覽器觸發 JavaScript 事件處理函式。
JavaScript 用 fetch()、Axios、XMLHttpRequest 或 $.ajax() 把 HTTP request 送到 API。
伺服器回傳 JSON、文字、HTML 片段或其他格式,JavaScript 再把資料解析出來。
JavaScript 只改需要更新的節點,因此畫面變化較快,也保留使用者目前的操作上下文。
| 底層要素 | 它負責什麼 | 你在畫面上看到的效果 |
|---|---|---|
| HTTP | 提供 request / response 規則、方法、狀態碼與標頭 | 前端能送出 GET、POST 等請求,伺服器能回傳 JSON / HTML |
| JavaScript | 負責發送請求、等待回應、解析資料 | 可寫 fetch()、Promise、async/await 等非同步程式 |
| DOM | 作為頁面可被操作的結構 | 可只更新某個列表、數字、表格、訊息區塊,而非整頁刷新 |
| API / Server | 接收請求、處理邏輯、回傳資料 | 頁面能取得最新資料並同步畫面狀態 |
async/await 後面的程式。
fetch() 讀取狀態並更新畫面這個例子同時示範了:事件 → HTTP 請求 → JSON 回應 → DOM 更新。
<button id="load-status">讀取狀態</button>
<p id="status">尚未讀取</p>
<script>
async function loadStatus() {
const response = await fetch("/api/status");
const data = await response.json();
document.querySelector("#status").textContent = data.message;
}
document
.querySelector("#load-status")
.addEventListener("click", loadStatus);
</script>
服務狀態:ok,資料已載入。
fetch() 送出的是 HTTP request,不是特殊的 AJAX 專用協定。await response.json() 代表把回傳的 JSON body 解析成 JavaScript 物件。如果不用 AJAX,傳統作法常常是整頁重新整理;用 AJAX 則可以只補上新資料。
const form = document.querySelector("#message-form");
const list = document.querySelector("#message-list");
form.addEventListener("submit", async (event) => {
event.preventDefault();
const message = document.querySelector("#message-input").value;
const response = await fetch("/api/messages", {
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify({ message })
});
const data = await response.json();
list.insertAdjacentHTML("beforeend", `<li>${data.message}</li>`);
});
event.preventDefault() 讓表單先不要用傳統方式整頁送出。POST 請求,拿到伺服器回應後再更新列表。| 工具 / 名詞 | 它是什麼 | 和 AJAX 的關係 |
|---|---|---|
| AJAX | 互動模式 / 概念 | 描述「用 JavaScript 非同步發送 HTTP 請求並更新畫面」這件事 |
XMLHttpRequest |
早期瀏覽器 API | 最早常用來實作 AJAX 的原生方法 |
$.ajax() |
jQuery 提供的方法 | 把早期 AJAX 寫法包裝得更短、更一致 |
fetch() |
現代原生 API | 今天最常見的 AJAX 實作方式之一 |
| Axios | HTTP library | 用更一致的介面處理 AJAX / API 請求,常見於正式專案 |
fetch() / Axios / $.ajax() 則是「完成這件事的工具」。
| 名詞 | 本質 | 通訊方式 | 典型用途 |
|---|---|---|---|
| AJAX | 互動模式 / 概念 | 通常建立在 HTTP request / response 上 | 局部更新畫面、表單送出、查詢 API |
fetch() |
瀏覽器原生 API | 用 HTTP 發送單次請求,再等待單次回應 | 今天最常見的 AJAX 寫法之一 |
| WebSocket | 持續連線協定 | 建立一次連線後,雙方都能主動推送訊息 | 聊天室、即時通知、多人同步、遊戲狀態 |
fetch() 不是 AJAX 的對手,而是 AJAX 的常用做法;WebSocket 則不是「比較快的 AJAX」,而是適用於持續雙向通訊的另一種模型。
不是。名字保留了歷史,但今天多數 API 都回 JSON。
不是。jQuery 只是曾經很流行的 AJAX 實作工具之一。
也不是。AJAX 仍是 request / response;WebSocket 則是持續連線、雙向通訊。
fetch()、Axios、$.ajax() 都可以用來實作 AJAX;差別在 API 風格與時代背景。