AJAX (Asynchronous JavaScript and XML) 是一種使用 JavaScript 來進行非同步網絡請求的技術。它允許網頁從伺服器獲取資料而無需重新加載整個頁面。這樣可以讓使用者體驗到更加流暢的互動,並減少頁面加載時間。
雖然名稱裡有 XML,但現代開發更多是用 JSON 來作為資料格式。
基本 AJAX 概念
AJAX 的工作流程是透過 JavaScript 發送 HTTP 請求到伺服器,並在收到回應後進行處理,通常會動態更新頁面的一部分內容。
使用 Fetch API
fetch() 是現代瀏覽器提供的 API,用於發送非同步請求。以下是基本的 fetch() 用法:
fetch('https://jsonplaceholder.typicode.com/posts')
  .then(response => response.json())  // 將回應轉換為 JSON
  .then(data => console.log(data))    // 在控制台印出資料
  .catch(error => console.error('Error:', error));
範例:AJAX 動態載入內容
這是一個簡單的範例,當用戶點擊按鈕時,通過 AJAX 從伺服器獲取資料並動態顯示在頁面上。
<!DOCTYPE html>
<html lang="zh-TW">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>AJAX 範例</title>
</head>
<body>
    <button id="loadData">載入資料</button>
    <div id="content"></div>
    <script>
        const button = document.getElementById('loadData');
        const contentDiv = document.getElementById('content');
        button.addEventListener('click', function() {
            fetch('https://jsonplaceholder.typicode.com/posts/1')
                .then(response => response.json())
                .then(data => {
                    contentDiv.innerHTML = `
                        <h2>${data.title}</h2>
                        <p>${data.body}</p>
                    `;
                })
                .catch(error => console.error('Error:', error));
        });
    </script>
</body>
</html>
在這個範例中,按下按鈕後,頁面會向 API 請求一篇文章,並將回應的資料動態顯示在頁面上。
非同步操作與 Promise
在 JavaScript 中,非同步操作通常會使用 Promise 來處理。Promise 代表一個尚未完成但最終會返回結果(成功或失敗)的操作。
你可以用 then() 方法來鏈接一連串的操作,或使用 async/await 語法讓程式碼看起來更加直觀。
範例:async/await
async function loadData() {
    try {
        const response = await fetch('https://jsonplaceholder.typicode.com/posts/1');
        const data = await response.json();
        console.log(data);
    } catch (error) {
        console.error('Error:', error);
    }
}
loadData();
使用 *async/await *可以讓非同步操作寫起來像同步操作一樣,這樣的程式碼更加易讀。
在第十六天,更熟悉了 AJAX 與 非同步操作。通過這些技術,網頁可以實現更加靈活的動態內容加載,提升用戶體驗。明天,會繼續深入探討 AJAX 在實際專案中的應用,並且學習如何處理更加複雜的非同步邏輯。