目录
- 什么是 AJAX?
- 为什么使用 jQuery 处理 AJAX?
- 核心方法:
$.ajax() - 快捷方法:
$.get()和$.post() - 实战案例:动态加载用户列表
- 处理服务器响应
- 发送数据到服务器
- 处理错误
- 现代替代方案:Fetch API
什么是 AJAX?
AJAX (Asynchronous JavaScript and XML) 不是一门新的编程语言,而是一种使用现有技术组合、创建更好更快、更动态的网页应用的技术。

核心思想: 在不重新加载整个网页的情况下,与服务器交换数据并更新网页的某一部分。
工作流程:
- 用户在网页上进行某个操作(如点击按钮)。
- JavaScript 创建一个 XMLHttpRequest 对象(jQuery 在背后帮我们做了)。
- 该对象向 Web 服务器发送一个异步请求。
- 服务器处理请求,并返回数据(通常是 JSON 或 XML 格式)。
- 浏览器接收数据,并由 JavaScript 动态更新网页内容。
结果: 页面响应更快,用户体验更流畅,感觉就像一个桌面应用程序。
为什么使用 jQuery 处理 AJAX?
虽然原生 JavaScript 也可以实现 AJAX,但使用 jQuery 有巨大优势:
- 语法简洁: jQuery 将复杂的原生
XMLHttpRequest对象封装成简单易用的方法。 - 跨浏览器兼容: 你无需担心不同浏览器(如 IE, Chrome, Firefox)之间的兼容性问题,jQuery 已经帮你处理好了。
- 链式调用: 可以像搭积木一样组合不同的操作。
- 丰富的回调函数: 方便地在请求的不同阶段(成功、失败、完成)执行代码。
- 便捷的工具函数: 如
$.get()和$.post(),让常见操作一行代码搞定。
核心方法:$.ajax()
$.ajax() 是 jQuery 中最底层、功能最强大的 AJAX 方法,所有其他快捷方法(如 $.get, $.post)在底层都是调用它实现的。
基本语法:
$.ajax({
url: "请求的URL地址",
method: "请求方法", // GET 或 POST
data: { /* 要发送的数据 */ },
dataType: "服务器返回的数据类型", // 如 "json", "html", "text"
success: function(response) {
// 请求成功后执行的回调函数
// response 是服务器返回的数据
},
error: function(xhr, status, error) {
// 请求失败后执行的回调函数
// xhr: XMLHttpRequest 对象
// status: 错误状态
// error: 错误信息
},
complete: function(xhr, status) {
// 请求完成后执行的回调函数(无论成功或失败)
}
});
快捷方法:$.get() 和 $.post()
对于最常见的 GET 和 POST 请求,jQuery 提供了更简单的快捷方法。
$.get(): 用于发送 GET 请求
GET 请求通常用于从服务器获取数据,数据会附加在 URL 后面。
语法:
$.get(url, data, success(response, status, xhr), dataType);
示例:
$.get(
"api/users", // URL
{ page: 1, limit: 10 }, // 发送到服务器的数据 (会拼接到 URL 后面)
function(data) { // 成功回调
console.log("获取用户数据成功:", data);
},
"json" // 期望返回的数据类型
);
$.post(): 用于发送 POST 请求
POST 请求通常用于向服务器提交数据,数据在请求体中发送,更安全,且可以发送更大的数据。
语法:
$.post(url, data, success(response, status, xhr), dataType);
示例:
$.post(
"api/users", // URL
{ name: "张三", email: "zhangsan@example.com" }, // 要发送的数据
function(response) { // 成功回调
console.log("用户创建成功:", response);
},
"json" // 期望返回的数据类型
);
实战案例:动态加载用户列表
让我们通过一个完整的例子来学习,假设我们有一个按钮,点击后从服务器加载用户列表并显示在页面上。
准备:
-
HTML (
index.html):<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <title>jQuery AJAX 示例</title> <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> <style> body { font-family: sans-serif; } #user-list { list-style-type: none; padding: 0; } #user-list li { background: #f4f4f4; margin: 5px 0; padding: 10px; border-radius: 5px; } button { padding: 10px 15px; font-size: 16px; cursor: pointer; } .loading { color: #888; } </style> </head> <body> <h1>用户列表</h1> <button id="load-users">加载用户</button> <ul id="user-list"></ul> <div id="message"></div> <script src="app.js"></script> </body> </html> -
模拟后端服务 (
server.js): 为了演示,我们使用一个简单的 Node.js + Express 服务器来提供模拟数据,如果你没有 Node.js 环境,可以直接使用一个静态的 JSON 文件或在线 API。# 1. 安装 Express npm install express # 2. 创建 server.js 文件
// server.js const express = require('express'); const app = express(); const port = 3000; // 模拟用户数据 const users = [ { id: 1, name: '李雷', email: 'lilei@example.com' }, { id: 2, name: '韩梅梅', email: 'hanmeimei@example.com' }, { id: 3, name: '王伟', email: 'wangwei@example.com' } ]; app.get('/api/users', (req, res) => { // 模拟网络延迟 setTimeout(() => { res.json(users); }, 1000); }); app.listen(port, () => { console.log(`服务器运行在 http://localhost:${port}`); });运行服务器:
node server.js -
前端 JavaScript (
app.js): 这是核心的 AJAX 逻辑。$(document).ready(function() { // 当点击按钮时 $('#load-users').on('click', function() { const $button = $(this); const $userList = $('#user-list'); const $message = $('#message'); // 禁用按钮,防止重复点击 $button.prop('disabled', true); $message.text('').removeClass('error').addClass('loading'); // 使用 $.get() 发送 AJAX 请求 $.get('http://localhost:3000/api/users', function(data) { // 请求成功 $userList.empty(); // 清空列表 $message.text('加载成功!'); // 遍历返回的数据并添加到列表中 $.each(data, function(index, user) { $userList.append(`<li>ID: ${user.id} - 姓名: ${user.name} - 邮箱: ${user.email}</li>`); }); }).fail(function(xhr, status, error) { // 请求失败 $message.text('加载失败: ' + error).addClass('error'); console.error("AJAX Error:", status, error); }).always(function() { // 无论成功失败,都会执行 $button.prop('disabled', false); // 重新启用按钮 }); }); });
运行流程:
- 点击“加载用户”按钮。
$.get()向http://localhost:3000/api/users发送请求。- 服务器响应,返回 JSON 格式的用户数组。
success回调函数被触发,数据被解析为 JavaScript 对象。- 使用
$.each遍历用户数组,动态生成<li>元素并添加到<ul>中。 fail回调用于处理请求失败的情况(服务器宕机或 URL 错误)。always回调确保按钮在请求结束后被重新启用。
处理服务器响应
服务器返回的数据类型由 dataType 选项或 jQuery 的智能猜测决定。
"json": 如果返回的是application/json,jQuery 会自动将响应字符串解析为 JavaScript 对象,这是最常用的类型。"text": 直接返回原始字符串。"html": 返回 HTML 片段,可以直接插入到 DOM 中。"script": 返回 JavaScript 代码,并自动执行。
示例:
$.get("api/data.php", { id: 123 }, function(html) {
// 假设 dataType 是 "html",或者服务器返回的是 HTML
$('#result-container').html(html);
}, "html");
发送数据到服务器
除了在 URL 中传递数据(GET),你还可以通过 data 选项发送数据。
GET 请求 (数据在 URL 中):
$.get("api/search", { query: "jquery", page: 1 });
// 实际请求 URL: /api/search?query=jquery&page=1
POST 请求 (数据在请求体中):
$.post("api/submit-form", {
username: "john_doe",
password: "123456"
}, function(response) {
console.log("表单提交成功:", response);
});
处理错误**
使用 fail 回调(或 error 回调,在 $.ajax 中)来捕获和处理错误。
常见错误原因:
- URL 错误:404 Not Found。
- 网络问题:服务器无响应。
- 服务器内部错误:500 Internal Server Error。
- 跨域问题:浏览器的同源策略阻止了请求(需要服务器配置 CORS)。
示例:
$.ajax({
url: "/api/non-existent-endpoint",
method: "GET",
success: function(data) {
console.log(data);
},
error: function(xhr, status, error) {
// xhr.status 可以获取 HTTP 状态码
if (xhr.status === 404) {
alert("请求的资源不存在!");
} else {
alert("发生错误: " + error);
}
}
});
现代替代方案:Fetch API
虽然 jQuery 依然强大,但在现代前端开发中,浏览器内置的 Fetch API 已经成为新的标准,它基于 Promise,语法更现代,是学习原生 JavaScript 的重要一环。
Fetch API 示例 (对比 jQuery):
// --- jQuery AJAX ---
$.get('/api/data', function(data) {
console.log(data);
});
// --- Fetch API ---
fetch('/api/data')
.then(response => {
// 检查响应是否成功
if (!response.ok) {
throw new Error('网络响应不正常');
}
// 将响应体解析为 JSON
return response.json();
})
.then(data => {
// 获取到最终的 JSON 数据
console.log(data);
})
.catch(error => {
// 捕获网络错误或解析错误
console.error('Fetch 错误:', error);
});
Fetch 的优点:
- 原生支持,无需引入库。
- 基于 Promise,更符合现代异步编程模式。
- 更灵活,可以轻松处理流式数据。
Fetch 的缺点:
- 对旧浏览器(如 IE11)支持不佳。
- 错误处理机制不同(只有网络错误会进入
catch,HTTP 404/500 不会)。 - 默认不发送 cookies,需要配置。
| 特性 | jQuery AJAX | Fetch API |
|---|---|---|
| 兼容性 | 极好,支持所有主流浏览器,包括旧版 IE。 | 现代浏览器,IE 不支持。 |
| 语法 | 回调函数风格,简洁直观。 | 基于 Promise,链式调用,更现代。 |
| 依赖 | 需要 jQuery 库。 | 浏览器内置,无依赖。 |
| 错误处理 | fail 回调统一处理所有错误。 |
只捕获网络错误,需手动检查 response.ok。 |
| 功能 | 功能强大,封装了常用场景。 | 功能灵活,是底层 API。 |
学习建议:
- 对于初学者或维护旧项目: jQuery AJAX 是一个非常好的起点,它能让你快速理解 AJAX 的核心概念,而不会被底层细节困扰。
- 对于现代前端开发: Fetch API 是必须掌握的技能,它更轻量、更强大,是未来趋势,建议在掌握 jQuery AJAX 后,积极学习和使用 Fetch API。
希望这份详细的教程能帮助你彻底理解并掌握 jQuery AJAX!
