前言
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的区别
|
证书 |
不需要 |
需要到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的高级应用,欢迎持续关注!
网硕互联帮助中心


评论前必须登录!
注册