
- Javascript 基礎教程
- Javascript - 首頁
- JavaScript - 路線圖
- JavaScript - 概述
- JavaScript - 特性
- JavaScript - 啟用
- JavaScript - 放置
- JavaScript - 語法
- JavaScript - Hello World
- JavaScript - Console.log()
- JavaScript - 註釋
- JavaScript - 變數
- JavaScript - let 語句
- JavaScript - 常量
- JavaScript - 資料型別
- JavaScript - 型別轉換
- JavaScript - 嚴格模式
- JavaScript - 保留關鍵字
- JavaScript 運算子
- JavaScript - 運算子
- JavaScript - 算術運算子
- JavaScript - 比較運算子
- JavaScript - 邏輯運算子
- JavaScript - 位運算子
- JavaScript - 賦值運算子
- JavaScript - 條件運算子
- JavaScript - typeof 運算子
- JavaScript - 空值合併運算子
- JavaScript - 刪除運算子
- JavaScript - 逗號運算子
- JavaScript - 分組運算子
- JavaScript - Yield 運算子
- JavaScript - 展開運算子
- JavaScript - 冪運算子
- JavaScript - 運算子優先順序
- JavaScript 控制流
- JavaScript - If...Else
- JavaScript - While 迴圈
- JavaScript - For 迴圈
- JavaScript - For...in
- Javascript - For...of
- JavaScript - 迴圈控制
- JavaScript - Break 語句
- JavaScript - Continue 語句
- JavaScript - Switch Case
- JavaScript - 使用者定義迭代器
- JavaScript 函式
- JavaScript - 函式
- JavaScript - 函式表示式
- JavaScript - 函式引數
- JavaScript - 預設引數
- JavaScript - Function() 建構函式
- JavaScript - 函式提升
- JavaScript - 自執行函式
- JavaScript - 箭頭函式
- JavaScript - 函式呼叫
- JavaScript - Function call()
- JavaScript - Function apply()
- JavaScript - Function bind()
- JavaScript - 閉包
- JavaScript - 變數作用域
- JavaScript - 全域性變數
- JavaScript - 智慧函式引數
- JavaScript 物件
- JavaScript - Number
- JavaScript - Boolean
- JavaScript - 字串
- JavaScript - 陣列
- JavaScript - 日期
- JavaScript - DataView
- JavaScript - 處理程式
- JavaScript - Math
- JavaScript - RegExp
- JavaScript - Symbol
- JavaScript - 集合
- JavaScript - WeakSet
- JavaScript - 對映
- JavaScript - WeakMap
- JavaScript - 可迭代物件
- JavaScript - Reflect
- JavaScript - TypedArray
- JavaScript - 模板字面量
- JavaScript - 帶標籤的模板
- 面向物件 JavaScript
- JavaScript - 物件
- JavaScript - 類
- JavaScript - 物件屬性
- JavaScript - 物件方法
- JavaScript - 靜態方法
- JavaScript - 顯示物件
- JavaScript - 物件訪問器
- JavaScript - 物件建構函式
- JavaScript - 原生原型
- JavaScript - ES5 物件方法
- JavaScript - 封裝
- JavaScript - 繼承
- JavaScript - 抽象
- JavaScript - 多型
- JavaScript - 解構賦值
- JavaScript - 物件解構
- JavaScript - 陣列解構
- JavaScript - 巢狀解構
- JavaScript - 可選鏈
- JavaScript - 全域性物件
- JavaScript - Mixins
- JavaScript - 代理
- JavaScript 版本
- JavaScript - 歷史
- JavaScript - 版本
- JavaScript - ES5
- JavaScript - ES6
- ECMAScript 2016
- ECMAScript 2017
- ECMAScript 2018
- ECMAScript 2019
- ECMAScript 2020
- ECMAScript 2021
- ECMAScript 2022
- JavaScript 非同步
- JavaScript - 非同步
- JavaScript - 回撥函式
- JavaScript - Promise
- JavaScript - Async/Await
- JavaScript - 微任務
- JavaScript - Promise 化
- JavaScript - Promise 鏈式呼叫
- JavaScript - 定時事件
- JavaScript - setTimeout()
- JavaScript - setInterval()
- JavaScript Cookie
- JavaScript - Cookie
- JavaScript - Cookie 屬性
- JavaScript - 刪除 Cookie
- JavaScript 瀏覽器 BOM
- JavaScript - 瀏覽器物件模型
- JavaScript - Window 物件
- JavaScript - Document 物件
- JavaScript - Screen 物件
- JavaScript - History 物件
- JavaScript - Navigator 物件
- JavaScript - Location 物件
- JavaScript - Console 物件
- JavaScript Web API
- JavaScript - Web API
- JavaScript - History API
- JavaScript - Storage API
- JavaScript - Forms API
- JavaScript - Worker API
- JavaScript - Fetch API
- JavaScript - Geolocation API
- JavaScript 事件
- JavaScript - 事件
- JavaScript - DOM 事件
- JavaScript - addEventListener()
- JavaScript - 滑鼠事件
- JavaScript - 鍵盤事件
- JavaScript - 表單事件
- JavaScript - 視窗/文件事件
- JavaScript - 事件委託
- JavaScript - 事件冒泡
- JavaScript - 事件捕獲
- JavaScript - 自定義事件
- JavaScript 錯誤處理
- JavaScript - 錯誤處理
- JavaScript - try...catch
- JavaScript - 除錯
- JavaScript - 自定義錯誤
- JavaScript - 擴充套件錯誤
- JavaScript 重要關鍵字
- JavaScript - this 關鍵字
- JavaScript - void 關鍵字
- JavaScript - new 關鍵字
- JavaScript - var 關鍵字
- JavaScript HTML DOM
- JavaScript - HTML DOM
- JavaScript - DOM 方法和屬性
- JavaScript - DOM 文件
- JavaScript - DOM 元素
- JavaScript - DOM 屬性 (Attr)
- JavaScript - DOM 表單
- JavaScript - 更改 HTML
- JavaScript - 更改 CSS
- JavaScript - DOM 動畫
- JavaScript - DOM 導航
- JavaScript - DOM 集合
- JavaScript - DOM NodeList
- JavaScript - DOM DOMTokenList
- JavaScript 其他
- JavaScript - Ajax
- JavaScript - 非同步迭代
- JavaScript - Atomics 物件
- JavaScript - rest 引數
- JavaScript - 頁面重定向
- JavaScript - 對話方塊
- JavaScript - 頁面列印
- JavaScript - 驗證
- JavaScript - 動畫
- JavaScript - 多媒體
- JavaScript - 影像對映
- JavaScript - 瀏覽器
- JavaScript - JSON
- JavaScript - 多行字串
- JavaScript - 日期格式
- JavaScript - 獲取日期方法
- JavaScript - 設定日期方法
- JavaScript - 模組
- JavaScript - 動態匯入
- JavaScript - BigInt
- JavaScript - Blob
- JavaScript - Unicode
- JavaScript - 淺複製
- JavaScript - 呼叫棧
- JavaScript - 引用型別
- JavaScript - IndexedDB
- JavaScript - Clickjacking 攻擊
- JavaScript - 柯里化
- JavaScript - 圖形
- JavaScript - Canvas
- JavaScript - 防抖
- JavaScript - 效能
- JavaScript - 樣式指南
JavaScript - Ajax
非同步 JavaScript 和 XML (Ajax) 代表了一種 Web 開發技術:它使伺服器和網頁之間能夠進行動態、互動式的通訊,而無需重新載入整個頁面。描述符“非同步”強調資料交換可以在後臺發生,而不會中斷使用者體驗。Ajax 使得能夠即時更新網頁的特定部分,而不是空閒地等待整個頁面重新整理,從而產生更流暢、更響應的介面。
Ajax 如何工作?
在無需完全重新載入頁面的情況下實現動態更新的關鍵作用在於 JavaScript 中 Ajax 功能內的 XMLHttpRequest 物件。此特定過程允許伺服器和網頁之間進行非同步通訊。當接收到此物件傳送的請求時,伺服器會以資料(通常為 JSON 或 XML 格式)進行響應。處理這些資料是 JavaScript 的任務;它會即時更新網頁的特定部分。非同步特性是現代 Web 開發的關鍵特性,它確保這些操作在後臺以不顯眼的方式發生,從而透過允許非同步獲取和傳送資料來增強互動性。
在這裡,我們將探索 Ajax 以更深入地瞭解它。
有 4 種方法可以進行 Ajax 呼叫或在 JavaScript 中實現 Ajax,它們是
XMLHttpRequest(較舊的方法)
Fetch API(現代方法)
Axios(用於 HTTP 請求的庫)
jQuery Ajax
為了理解起見,我們將在所有示例中使用 JSONPlaceholder。
JSONPlaceholder 是一款開源的模擬 REST API 提供商,它允許開發人員測試其原型應用程式。它為各種資源(如使用者、帖子、評論等)返回虛假/虛擬資料。JSONPlaceholder 的 API 端點可以使用 HTTP 請求建立,它們將模擬真實 API 的特性,而無需任何身份驗證。我們在這裡的目標是使用這些 API/端點來理解 Javascript-Ajax。
使用 XMLHttpRequest
使用 XMLHttpRequest 的原生 JavaScript 方法是非同步請求的最古老方法。它依賴於 XMLHttpRequest 物件來建立和傳送 HTTP 請求。此方法涉及設定回撥函式以處理請求的各種狀態,使其適用於更簡單的場景。但是,與更現代的方法相比,它有一些侷限性。
示例
<!DOCTYPE html> <html lang="en"> <body> <p>Native XMLHttpRequest Example</p> <button onclick="nativeAjax()">Make Request</button> <pre id="result"></pre> <script> function nativeAjax() { var xhr = new XMLHttpRequest(); xhr.open('GET', 'https://jsonplaceholder.typicode.com/users/2', true); xhr.onreadystatechange = function () { if (xhr.readyState == 4 && xhr.status == 200) { var responseData = JSON.stringify(JSON.parse(xhr.responseText), null, 2); document.getElementById('result').innerText = 'Native XMLHttpRequest:\n' + responseData; } }; xhr.send(); } </script> </body> </html>
使用 Fetch API
Fetch API 提供了 XMLHttpRequest 的現代替代方案,它提供了更直接、更強大的語法;它返回 Promise,從而增強了對非同步操作的直觀處理。支援大量 HTTP 方法和標頭:這為開發人員提供了一種更簡潔、更簡潔的方法來發出非同步請求。當代 JavaScript 應用程式通常因為它清晰易用而更喜歡它。
示例
<!DOCTYPE html> <html> <body> <h1>Fetch API Example</h1> <button onclick="fetchApi()">Make Request</button> <pre id="result"></pre> <script> function fetchApi() { fetch('https://jsonplaceholder.typicode.com/users/3') .then(response => { if (!response.ok) { throw new Error('Network response was not ok'); } return response.json(); }) .then(data => { var formattedData = JSON.stringify(data, null, 2); document.getElementById('result').innerText = 'Fetch API:\n' + formattedData; }) .catch(error => { document.getElementById('result').innerText = 'Fetch API Error: ' + error.message; }); } </script> </body> </html>
使用 Axios
Axios 是一款用於發出 HTTP 請求的流行 JavaScript 庫。它的流行很大程度上歸因於其簡潔明瞭的語法:構建在 Promise 之上;此外,它還擁有自動 JSON 資料轉換支援功能,使其在該領域的庫中脫穎而出。Axios 提供的功能不僅僅是基本功能,它還提供了諸如請求和響應攔截器等高階功能,這是在現代 Web 開發環境中管理 AJAX 操作的可靠選擇。
示例
<!DOCTYPE html> <html> <head> <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script> </head> <body> <h1>Axios Example</h1> <button onclick="axiosExample()">Make Request</button> <pre id="result3"></pre> <script> function axiosExample() { axios.get('https://jsonplaceholder.typicode.com/users/5') .then(response => { var formattedData = JSON.stringify(response.data, null, 2); document.getElementById('result3').innerText = 'Axios:\n' + formattedData; }) .catch(error => { document.getElementById('result3').innerText = 'Axios Error: ' + error.message; }); } </script> </body> </html>
使用 Ajax jQuery
jQuery 中的 $.ajax 方法簡化了 AJAX 請求過程:這是一種之前很流行的方法;但是,隨著現代 JavaScript 的興起,其使用量有所減少。jQuery Ajax 提供了一個一致且跨瀏覽器相容的介面,由於其提供的這些優勢,它仍然適用於已經使用或需要 jQuery 特定功能的專案。但是,對於新專案,可能更喜歡現代的替代方案。
示例
<!DOCTYPE html> <html> <head> <script src="https://code.jquery.com/jquery-3.6.4.min.js"></script> </head> <body> <h1>jQuery Ajax Example</h1> <button onclick="jqueryAjax()">Make Request</button> <pre id="result4"></pre> <script> function jqueryAjax() { $.ajax({ url: 'https://jsonplaceholder.typicode.com/users/7', method: 'GET', dataType: 'json', success: function (data) { var formattedData = JSON.stringify(data, null, 2); document.getElementById('result4').innerText = 'jQuery Ajax:\n' + formattedData; }, error: function (xhr, status, error) { document.getElementById('result4').innerText = 'jQuery Ajax Error: ' + error; } }); } </script> </body> </html>
Ajax 用例
在現實場景中,開發人員通常使用 Ajax 來建立響應性和互動性強的 Web 應用程式。一個相關的示例:社交媒體平臺;在這裡,使用者能夠(藉助 Ajax)在後臺新增或載入新評論,而無需重新整理整個頁面。動態更新確保使用者體驗流暢且無中斷,允許使用者無縫地與內容和彼此互動。此過程產生了一個更具響應性和吸引力的平臺;它增強了使用者互動,從而提高了滿意度。
許多知名公司都利用 Ajax 來提升使用者體驗,例如 Google(Gmail、地圖)、Facebook、Twitter、亞馬遜、Netflix、GitHub、LinkedIn、YouTube、Microsoft Office Online 和 Uber。Ajax 用於實現即時更新、動態內容載入以及他們在各自平臺上的無縫互動。