AJAX技術全解析:從基礎到最佳實踐

目錄

  1. 什么是 AJAX?

  2. 工作原理

  3. XMLHttpRequest 基礎

  4. 現代 Fetch API

  5. Axios 第三方庫

  6. 數據處理

  7. 錯誤處理機制

  8. 跨域請求解決方案

  9. 最佳實踐

  10. 總結


1. 什么是 AJAX?

AJAX(Asynchronous JavaScript and XML)是一種通過瀏覽器與服務器進行異步通信的技術,它允許:

  • 在不刷新頁面的情況下更新內容

  • 實現局部頁面刷新

  • 提升用戶體驗和性能

核心優勢

傳統請求 → 整頁刷新(白屏等待)
AJAX 請求 → 局部更新(無縫交互)
 

2. 工作原理

  1. 用戶觸發事件(點擊/滾動等)

  2. 創建 XMLHttpRequest 對象

  3. 向服務器發送請求

  4. 服務器處理請求

  5. 返回響應數據

  6. 客戶端處理響應并更新 DOM


3. XMLHttpRequest 基礎

3.1 基礎用法

const xhr = new XMLHttpRequest();
xhr.open('GET', 'https://api.example.com/data', true);xhr.onreadystatechange = function() {if (xhr.readyState === 4) {if (xhr.status === 200) {console.log(JSON.parse(xhr.responseText));} else {console.error('請求失敗:', xhr.status);}}
};xhr.send();
 
3.2 關鍵屬性解析
屬性/方法說明
readyState0-4 的請求狀態碼
statusHTTP 狀態碼(200, 404等)
responseType指定響應格式(json/blob等)
setRequestHeader()設置請求頭

4. 現代 Fetch API

4.1 基礎用法

fetch('https://api.example.com/data').then(response => {if (!response.ok) throw new Error('Network error');return response.json();}).then(data => console.log(data)).catch(error => console.error('Error:', error));
  .catch(error => console.error('Error:', error));
4.2 Async/Await 優化

async function loadData() {try {const response = await fetch('/api/data');const data = await response.json();renderData(data);} catch (error) {showError(error.message);}
}
 

5. Axios 第三方庫

5.1 安裝與基礎使用

npm install axios
axios.get('/user?ID=12345').then(response => {console.log(response.data);}).catch(error => {console.error(error);});
5.2 高級功能

// 全局配置
axios.defaults.baseURL = 'https://api.example.com';// 攔截器
axios.interceptors.request.use(config => {config.headers.Authorization = `Bearer ${token}`;return config;
});
 

6. 數據處理

6.1 JSON 處理

// 自動解析
const response = await fetch(url);
const data = await response.json();// 手動處理
xhr.responseType = 'json';
xhr.onload = () => console.log(xhr.response);
 
6.2 表單提交

const formData = new FormData(document.getElementById('myForm'));
fetch('/submit', {method: 'POST',body: formData
});
 

7. 錯誤處理機制

7.1 通用錯誤處理

function handleErrors(response) {if (!response.ok) {throw new Error(`HTTP錯誤 ${response.status}`);}return response;
}fetch(url).then(handleErrors).then(/* 處理正常響應 */).catch(/* 處理所有錯誤 */);
 
7.2 超時處理

// Fetch + AbortController
const controller = new AbortController();
setTimeout(() => controller.abort(), 5000);fetch(url, { signal: controller.signal }).catch(err => {if (err.name === 'AbortError') {console.log('請求超時');}});
 

8. 跨域請求解決方案

8.1 CORS 配置

// 服務器端設置
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST
 
8.2 開發環境代理

// webpack.config.js
module.exports = {devServer: {proxy: {'/api': 'http://localhost:3000'}}
}
 

9. 最佳實踐

  1. 性能優化

    • 使用請求節流(throttle)

    • 實現加載狀態提示

    • 緩存頻繁訪問的數據

  2. 安全防護

    • 驗證和過濾用戶輸入

    • 使用 CSRF Token

    axios.defaults.headers.common['X-CSRF-TOKEN'] = token;
     
  3. 代碼規范

    • 統一封裝請求模塊

    • 使用 ES6+ 語法

    • 添加必要的注釋


10. 總結

技術選型建議

  • 簡單請求 → 使用原生?fetch()

  • 復雜項目 → 選擇?Axios

  • 舊瀏覽器支持 →?XMLHttpRequest

學習路線

  1. 掌握同源策略和 CORS

  2. 熟練使用開發者工具網絡面板

  3. 學習 RESTful API 設計規范

擴展閱讀

  • MDN AJAX 文檔

  • Fetch API 規范

  • Axios 官方文檔

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/79976.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/79976.shtml
英文地址,請注明出處:http://en.pswp.cn/web/79976.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

128.在 Vue 3 中使用 OpenLayers 實現繪制矩形截圖并保存地圖區域

📌 本文將介紹如何在 Vue 3 中使用 OpenLayers 實現: 1)用戶可在地圖上繪制矩形; 2)自動截取該區域地圖為圖片; 3)一鍵保存為本地 PNG 圖片。 ?效果如下圖所示 🧠一、前言 在地圖類…

單片機 | 基于STM32的智能馬桶設計

基于STM32的智能馬桶設計結合了傳感器技術、嵌入式控制及物聯網功能,旨在提升用戶體驗并實現健康監測。以下是其設計原理、功能模塊及代碼框架的詳細解析: 一、系統架構與核心功能 智能馬桶的系統架構通常分為主控模塊、傳感器模塊、執行器模塊、通信模塊及用戶交互模塊,主…

最短路與拓撲(2)

1、信使 #include<bits/stdc.h> using namespace std; const int N105; int n,m; int g[N][N]; int dist[N]; bool st[N]; const int INF0x3f3f3f3f;int dij(){memset(dist,0x3f,sizeof dist);dist[1]0;for(int i1;i<n;i){int t0;for(int j1;j<n;j){if(!st[j]&…

當 AI 邂逅絲路:揭秘「絲路智旅」,用 RAG 重塑中阿文化旅游體驗

目錄 系統命名:絲路智旅 (Silk Road Intelligent Travel)系統概述系統架構設計系統功能模塊技術選型:為何是它們?系統優勢與特點未來展望與擴展總結在數字浪潮席卷全球的今天,古老的絲綢之路正在以一種全新的方式煥發生機。當深厚的文化底蘊遇上尖端的人工智能技術,會碰撞…

SQLPub:一個提供AI助手的免費MySQL數據庫服務

給大家介紹一個免費的 MySQL 在線數據庫環境&#xff1a;SQLPub。它提供了最新版本的 MySQL 服務器測試服務&#xff0c;可以方便開發者和測試人員驗證數據庫功能&#xff0c;也可以用于學習 MySQL。 免費申請 在瀏覽器中輸入以下網址&#xff1a; https://sqlpub.com/ SQLP…

list簡單模擬實現

成員變量迭代器&#xff08;重點&#xff09;ListIterator運算符重載begin、end 插入、刪除inserterase頭插、尾插、頭刪、尾刪 operator->const_iterator拷貝構造operator析構函數完整代碼 由于前面已經模擬實現了vector&#xff0c;所以這里關于一些函數實現就不會講的過于…

【計算機視覺】基于Python的相機標定項目Camera-Calibration深度解析

基于Python的相機標定項目Camera-Calibration深度解析 1. 項目概述技術核心 2. 技術原理與數學模型2.1 相機模型2.2 畸變模型 3. 實戰指南&#xff1a;項目運行與標定流程3.1 環境配置3.2 數據準備3.3 執行步驟3.4 結果驗證 4. 常見問題與解決方案4.1 角點檢測失敗4.2 標定結果…

多光譜影像:解鎖遙感奧秘的 “彩色鑰匙”

在遙感領域&#xff0c;多光譜影像猶如一把神奇的 “彩色鑰匙”&#xff0c;為我們開啟洞察地球表面與大氣層的全新視角。 圖片來源于星圖云開放平臺 多光譜影像&#xff0c;顧名思義&#xff0c;就是利用遙感平臺上的多光譜傳感器&#xff0c;同時對地球目標地物在多個不同光譜…

【ROS2】ROS節點啟動崩潰:rclcpp::exceptions::RCLInvalidArgument

1、問題描述 啟動ROS節點時,直接崩潰,打印信息如下: terminate called after throwing an instance of rclcpp::exceptions::RCLInvalidArgumentwhat(): failed to create guard condition: context argument is null, at ./src/rcl/guard_condition.c:65 [ros2run]: Abo…

MinerU安裝(pdf轉markdown、json)

在Windows上安裝MinerU&#xff0c;參考以下幾個文章&#xff0c;可以成功安裝&#xff0c;并使用GPU解析。 整體安裝教程&#xff1a; MinerU本地化部署教程——一款AI知識庫建站的必備工具 其中安裝conda的教程&#xff1a; 一步步教你在 Windows 上輕松安裝 Anaconda以及使…

aws 實踐創建policy + Role

今天Cyber 通過image 來創建EC2 的時候,要添加policy, 雖然是administrator 的role, 參考Cyber 提供的link: Imageshttps://docs.cyberark.com/pam-self-hosted/14.2/en/content/pas%20cloud/images.htm#Bring 1 Step1:

【ROS2】編譯Qt實現的庫,然后鏈接該庫時,報錯:/usr/bin/ld: XXX undefined reference to `vtable for

1、問題描述 在ROS2工程中,編譯使用Qt實現的庫,在其它ROS2包鏈接該庫時,報錯: /usr/bin/ld: XXX undefined reference to `vtable for2、原因分析 查看鏈接失敗的幾個函數接口都是,信號函數(signals 標記的函數)。因為信號函數都只有定義,沒有實現,在執行ROS2 colc…

數據庫--處理模型(Processing Model)(二)

執行查詢的方法有很多,接下來將介紹以更高效和更有效率的方式執行分析工作負載(在OLAP系統中)的不同技術,包括以下內容: 執行并行性(Execution Parallelism)執行引擎(Execution Engines)執行操作符輸出(Execution Operator Output)中間數據表示(Intermediate Data …

PostgreSQL pgrowlocks 擴展詳解

一、簡介 pgrowlocks 是 PostgreSQL 官方提供的擴展模塊&#xff0c;用于查看指定表中每一行當前的行級鎖&#xff08;Row Lock&#xff09;信息。它非常適用于&#xff1a; 并發沖突排查行級鎖等待分析死鎖前兆探測熱點數據行分析 二、安裝與啟用 1. 安裝前提&#xff08;…

關于xammp數據庫打開不了,但是日志沒錯誤的問題解決以及其數據庫的備份

這里參考了兩篇文章 解決Xampp中mysql無法啟動的問題_xampp里面mysql的stop啟動不起來-CSDN博客 mysqli_real_connect(): (HY000/1045): Access denied for user ‘root‘‘localhost‘ (using password: YES-CSDN博客 相信很多和我一樣&#xff0c;很久沒登xammp突然數據庫…

在UI 原型設計中,交互規則有哪些核心要素?

在UI 原型設計中&#xff0c;交互規則主要有三個核心要素&#xff0c;分別為重要性、原則與實踐&#xff0c;具體表現在&#xff1a; 一、交互規則在 UI 原型設計中的重要性 明確交互邏輯&#xff1a;設計階段制定交互規則&#xff0c;清晰定義界面元素操作響應。 如社交應用…

BFD與VRRP聯動

一、概述 在前面的文章我們學習了VRRP與BFD協議,VRRP(虛擬路由冗余協議)的主要特點是當Master(主)設備出現故障時,Backup(備用)設備能夠快速接替Master的轉發工作,盡量縮短數據流的中斷時間。 在沒有采用BFD與VRRP聯動機制前,當Master出現故障時,VRRP依靠Backup設置的超時時間來…

Protobuf3協議關鍵字詳解與應用實例

一、核心語法與基礎關鍵字 syntax 聲明協議版本&#xff0c;必須為文件的第一行非空、非注釋內容。 syntax "proto3"; // 顯式指定proto3語法&#xff0c;否則編譯器默認使用proto2message 定義消息類型&#xff0c;包含一組結構化字段。支持嵌套消息定義&#xff…

如何在線免費壓縮PDF文檔?

PDF文件太大&#xff0c;通常是因為內部嵌入字體和圖片。怎么才能將文件大小減減肥呢&#xff0c;主要有降低圖片清晰度和去除相關字體兩個方向來實現文檔效果。接下來介紹三個免費壓縮PDF實用工具。 &#xff08;一&#xff09;iLoveOFD在線轉換工具 iLoveOFD在線轉換工具&a…

NSSCTF [GFCTF 2021]where_is_shell

889.[GFCTF 2021]where_is_shell(system($0)64位) [GFCTF 2021]where_is_shell (1) 1.準備 motalymotaly-VMware-Virtual-Platform:~$ file shell shell: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.s…