云计算百科
云计算领域专业知识百科平台

JS AJAX完全指南(一):从原生XHR到axios,再到JSON Server模拟数据

前言

AJAX是现代前端开发中与服务器交互的核心技术。本文将从AJAX基础概念讲起,系统讲解HTTP协议、原生XMLHttpRequest发送GET请求、axios库的使用、GET请求参数传递、数据渲染实战以及JSON Server搭建模拟接口。掌握这些内容,你将具备完整的前后端数据交互能力。


一、原生AJAX介绍

1.1 什么是AJAX

AJAX全称为 Asynchronous JavaScript And XML(异步的JS和XML)。通过AJAX可以在浏览器中向服务器发送异步请求,最大的优势是:无刷新获取数据,按需请求,提高网站性能。

特性

说明

本质​

不是新的编程语言,而是将现有标准组合使用的新方式

核心能力​

在浏览器中向服务器发送异步请求

最大优势​

无需刷新页面即可与服务器通信

性能提升​

按需请求数据,减少不必要的资源加载

1.2 AJAX的特点

优点

优点

说明

无刷新通信​

无需刷新页面即可与服务器端通信,速度快

按需更新​

允许根据用户事件(鼠标移入、点击等)更新部分页面内容

缺点

缺点

说明

没有浏览历史​

不能回退到之前的AJAX请求状态

存在跨域问题​

受同源策略限制

SEO不友好​

搜索引擎爬虫难以抓取动态加载的内容


二、HTTP与HTTPS

2.1 基本概念

协议

全称

说明

HTTP​

超文本传输协议

一种无状态的协议,用于传输超文本(如HTML文档),定义客户端如何请求资源以及服务器如何响应

HTTPS​

HTTP安全版

在HTTP基础上加入SSL/TLS层,提供数据加密和身份验证功能

2.2 HTTP与HTTPS的区别

对比项

HTTP

HTTPS

证书​

不需要

需要到CA申请证书,一般免费证书较少

数据传输​

明文传输

SSL加密传输

默认端口​

80

443

安全性​

无状态,不安全

加密传输+身份认证,更安全


三、HTTP状态码

3.1 常见状态码速查表

状态码

含义

说明

200​

请求成功

服务器找到并返回客户端请求的内容

301​

永久重定向

资源永久转移到新URL

302​

临时跳转

URL临时跳转,非永久性

304​

使用缓存

资源未修改,客户端可从本地缓存获取

403​

权限不足

服务器拒绝请求(无权限/IP被封)

404​

资源不存在

服务器找不到请求的资源(最常见错误码)

500​

服务器错误

服务器程序本身报错

3.2 状态码分类

分类

范围

含义

1xx

100-199

信息性状态码

2xx

200-299

成功状态码

3xx

300-399

重定向状态码

4xx

400-499

客户端错误状态码

5xx

500-599

服务器错误状态码


四、原生XMLHttpRequest发送GET请求

4.1 基本步骤

// 绑定事件
btn.onclick = function() {
// 1. 创建对象
const xhr = new XMLHttpRequest();

// 2. 初始化:设置请求方法和URL(可加参数)
xhr.open("GET", "http://127.0.0.1:8000/server?a=100&b=200&c=300");

// 3. 发送
xhr.send();

// 4. 事件绑定:处理服务端返回的结果
xhr.onreadystatechange = function() {
// 判断服务端返回了所有结果
if (xhr.readyState === 4) {
// 判断响应状态码(2xx表示成功)
if (xhr.status >= 200 && xhr.status < 300) {
// 处理结果:响应行、响应头、响应体
result.innerHTML = xhr.response;
}
}
};
};

4.2 事件监听处理响应结果

xhr.onreadystatechange = function() {
if (xhr.readyState === 4) { // 请求完成
if (xhr.status >= 200 && xhr.status < 300) { // 请求成功
// 处理服务器返回的结果
console.log(xhr.response);
}
}
};

4.3 readyState状态说明

状态值

说明

0​

初始化状态,XMLHttpRequest对象已创建

1​

open()方法已调用,请求已初始化

2​

send()方法已调用,请求已发送

3​

服务端返回部分结果

4​

服务端返回所有结果,请求完成

4.4 响应结果处理

xhr.onreadystatechange = function() {
if (xhr.readyState === 4) {
if (xhr.status >= 200 && xhr.status < 300) {
// 响应行
console.log(xhr.status); // 状态码
console.log(xhr.statusText); // 状态字符串

// 响应头
console.log(xhr.getAllResponseHeaders()); // 所有响应头

// 响应体
console.log(xhr.response); // 响应体内容
result.innerHTML = xhr.response; // 设置页面内容
}
}
};


五、使用axios发送AJAX请求

5.1 三种处理异步结果的方式

方式一:回调函数

axios.get("http://localhost:3002/user").then(
// 成功回调
(res) => {
console.log(res.data);
},
// 失败回调
(err) => {
console.log(err);
}
);

方式二:链式调用

axios.get("http://localhost:3002/user")
.then((res) => {
// 处理成功
console.log(res.data);
})
.catch((err) => {
// 捕获失败
console.log(err.message);
});

方式三:async/await(ES6推荐)

async function getData() {
try {
let res = await axios.get("http://localhost:3002/user");
console.log(res.data);
} catch (error) {
console.log(error);
}
}

5.2 三种方式对比

方式

优点

缺点

回调​

简单直观

回调地狱,代码嵌套深

链式调用​

代码扁平,易读

仍需.then/.catch

async/await​

最接近同步代码,推荐

需配合try/catch


六、axios GET请求参数传递

6.1 URL直接传参

// 直接在URL中添加查询参数
let res = await axios.get("http://localhost:3001/list?name=孙悟空");

6.2 使用params对象传参(推荐)

let res = await axios.get("http://localhost:3001/list", {
params: { // params为固定属性名
id: 4
}
});

6.3 两种方式对比

方式

写法

适用场景

URL拼接​

?key=value

参数少且简单

params对象​

{params: {key: value}}

参数多或动态生成


七、数据渲染实战案例

7.1 类封装实现数据获取和渲染

class DataRenderer {
constructor(url, containerSelector) {
this.url = url;
this.container = document.querySelector(containerSelector);
this.init();
}

async init() {
try {
const data = await this.fetchData();
this.render(data);
} catch (error) {
console.error('数据获取失败:', error);
}
}

async fetchData() {
const response = await axios.get(this.url);
return response.data;
}

render(data) {
// 根据数据结构渲染到页面
this.container.innerHTML = `
<h3>${data.name}</h3>
<p>年龄: ${data.age}</p>
<p>性别: ${data.sex}</p>
<p>地址: ${data.address}</p>
`;
}
}

// 使用示例
const renderer = new DataRenderer(
'http://localhost:3002/user',
'#app'
);


八、JSON Server配置说明

8.1 什么是JSON Server

json-server​ 是一个能让前端人员在本地搭建JSON服务的工具,用于模拟后端数据接口。

特性

说明

主要用途​

前后端分离开发时,前端先行模拟数据

工作流程​

后端接口未开发好 → 前端用json-server模拟 → 后端接口开发好后替换URL

跨平台​

一个可执行文件即可在多种操作系统上运行

简单易用​

只需访问特定URL即可查看数据列表并开始通信

GitHub地址:GitHub – typicode/json-server: Get a full fake REST API with zero coding in less than 30 seconds (seriously) · GitHub

npm地址:https://www.npmjs.com/package/json-server

8.2 功能特性

特性

说明

跨平台兼容

一个可执行文件即可在多种操作系统上运行

简单易用

只需访问特定URL,即可查看数据列表并开始通信

安全可靠

允许通过防火墙设置,只开放指定的端口

Websocket一体化

内置Web服务器,支持WebSocket连接

易于集成

通过JSON格式交换数据,便于前后端开发

高级功能

支持跨域、jsonp、路由订制、数据快照保存等

8.3 package.json脚本配置

{
"scripts": {
"index": "json-server –watch index.json –port 3001",
"db": "json-server –watch db.json –port 3002",
"all": "concurrently \\"npm run index\\" \\"npm run db\\""
}
}

命令

说明

npm run index

启动列表数据服务(端口3001)

npm run db

启动用户数据服务(端口3002)

npm run all

同时启动两个服务

8.4 数据文件结构

用户数据(db.json)

{
"user": {
"name": "jack",
"age": 18,
"sex": "男",
"address": "合肥"
}
}

列表数据(index.json)

{
"list": [
{
"id": "1",
"name": "唐僧",
"age": 20,
"address": "东土大唐"
}
]
}


九、关键知识点总结

9.1 技术栈速查表

技术

说明

适用场景

XMLHttpRequest​

浏览器原生AJAX API

需要手动控制请求细节

axios​

基于Promise的HTTP客户端

简化异步请求处理

async/await​

ES6异步编程解决方案

使异步代码更清晰易读

JSON Server​

REST API模拟服务器

前端开发时模拟后端接口

9.2 注意事项

注意事项

说明

响应数据处理​

注意JSON字符串与JavaScript对象的转换

跨域问题​

生产环境需后端配置CORS或使用代理

请求错误处理​

始终使用try/catch或.catch()处理错误

URL替换​

后端接口开发好后,替换json-server的URL


总结

本文系统梳理了AJAX第一部分的完整知识体系:

主题

核心要点

AJAX基础​

异步请求、无刷新更新、优缺点

HTTP/HTTPS​

协议区别、端口差异、安全性

状态码​

200成功、301/302重定向、304缓存、403/404/500错误

原生XHR​

创建对象、open/send、readyState、status判断

axios​

回调/链式/async-await三种方式、params传参

JSON Server​

安装配置、数据文件结构、多端口启动

掌握这些内容,你就具备了前后端数据交互的完整能力。下一篇将继续深入AJAX的高级应用,欢迎持续关注!

赞(0)
未经允许不得转载:网硕互联帮助中心 » JS AJAX完全指南(一):从原生XHR到axios,再到JSON Server模拟数据
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!