jQuery AJAX 教程:从入门到精通
目录
- 什么是 AJAX?
- 为什么使用 jQuery 处理 AJAX?
- 核心方法:
$.ajax() - 便捷方法:
$.get()和$.post() - 处理服务器响应
- 发送数据到服务器
- 处理表单提交
- 错误处理
- 最佳实践与总结
- 现代替代方案:Fetch API
什么是 AJAX?
AJAX 的全称是 Asynchronous JavaScript and XML(异步的 JavaScript 和 XML),它不是一种新的编程语言,而是一种使用现有标准创建更好、更快、交互性更强 Web 应用程序的技术。

核心思想: 在不重新加载整个网页的情况下,与服务器交换数据并更新部分网页内容。
工作原理:
浏览器内置了一个 XMLHttpRequest 对象(简称XHR),JavaScript 可以通过这个对象在后台向服务器发送 HTTP 请求,并接收服务器返回的数据,AJAX 利用这个机制实现了页面的异步更新。
通俗比喻: 想象你在一家餐厅点餐,传统方式(没有 AJAX)是:你点完菜,必须等所有菜都做好才能上桌(页面刷新),而 AJAX 方式是:你每点一个菜,厨房(服务器)就立刻炒一个,服务员(AJAX)马上给你端上来(页面局部更新),你不用等所有菜都齐了才能吃。
为什么使用 jQuery 处理 AJAX?
虽然原生 JavaScript 也能实现 AJAX,但使用 jQuery 有巨大的优势:

- 跨浏览器兼容性: jQuery 封装了不同浏览器下
XMLHttpRequest对象的差异,你不需要写一堆兼容代码。 - 语法简洁: jQuery 提供了简单、易读、链式的 API,大大简化了 AJAX 请求的代码量。
- 强大的功能: 除了基础的 GET/POST 请求,jQuery 还支持 JSONP、加载脚本和片段、全局事件处理等高级功能。
- 链式调用: 可以方便地在 AJAX 请求完成后执行一系列操作。
核心方法:$.ajax()
$.ajax() 是 jQuery 中最底层、功能最强大的 AJAX 方法,其他所有便捷方法(如 $.get, $.post)都是基于它封装的。
基本语法:
$.ajax(url, [settings]);
或者使用对象配置的方式(更推荐):
$.ajax({
url: "url/to/server",
method: "GET", // 或 "POST"
// 更多配置项...
});
常用配置参数:

| 参数 | 描述 | 示例 |
|---|---|---|
url |
请求发送到的 URL。 | "data.php" |
method |
HTTP 请求方法 (GET, POST)。 | "GET" |
data |
发送到服务器的数据。 | { name: "John", age: 30 } 或 "name=John&age=30" |
dataType |
服务器预期返回的数据类型。 | "json", "xml", "html", "text" |
success |
请求成功时的回调函数。 | function(data) { ... } |
error |
请求失败时的回调函数。 | function(xhr, status, error) { ... } |
complete |
请求完成(无论成功或失败)时的回调函数。 | function(xhr, status) { ... } |
便捷方法:$.get() 和 $.post()
对于最常见的 GET 和 POST 请求,jQuery 提供了更简洁的便捷方法。
$.get() - 发送 GET 请求
用于从服务器获取数据。
语法:
$.get(url, [data], [success(data, textStatus, jqXHR)], [dataType]);
示例:
假设有一个 server.php 文件,根据用户名返回欢迎信息。
// server.php 内容: echo "欢迎, " . $_GET['username'];
// 发送一个 GET 请求
$.get("server.php", { username: "Peter" }, function(response, status) {
// response: 服务器返回的数据 ("欢迎, Peter")
// status: 请求状态 ("success", "error", "timeout" 等)
if (status === "success") {
alert(response);
}
});
$.post() - 发送 POST 请求
用于向服务器提交数据(表单数据)。
语法:
$.post(url, [data], [success(data, textStatus, jqXHR)], [dataType]);
示例:
假设有一个 save.php 文件,用于保存用户信息。
// save.php 内容: $name = $_POST['name']; echo "数据已保存: " . $name;
// 发送一个 POST 请求
$.post("save.php", { name: "Mary" }, function(response, status) {
if (status === "success") {
$("#result").html(response);
}
});
处理服务器响应
服务器返回的数据通常是 HTML、JSON 或 XML 格式,jQuery 的 AJAX 方法可以自动处理大部分常见格式的响应。
示例 1:返回 HTML
<div id="news-container"></div>
$.ajax({
url: "news-feed.html",
dataType: "html", // 告诉 jQuery 期望返回 HTML
success: function(html) {
// 直接将返回的 HTML 插入到 div 中
$("#news-container").html(html);
}
});
示例 2:返回 JSON (非常常用)
服务器端应返回符合 JSON 格式的字符串,并设置 Content-Type: application/json。
$.ajax({
url: "user-info.json",
dataType: "json", // jQuery 会自动解析 JSON 字符串为 JavaScript 对象
success: function(user) {
// user 现在是一个 JavaScript 对象
console.log(user.name); // "张三"
console.log(user.email); // "zhangsan@example.com"
$("#user-name").text(user.name);
$("#user-email").text(user.email);
}
});
user-info.json 文件内容:
{
"name": "张三",
"email": "zhangsan@example.com",
"age": 25
}
发送数据到服务器
通过 data 参数发送数据,jQuery 会自动将其正确编码。
// 发送一个 JSON 对象
$.ajax({
url: "update-profile.php",
method: "POST",
data: {
id: 123,
status: "active"
},
success: function(response) {
console.log("更新成功!");
}
});
// jQuery 会自动将其转换为: "id=123&status=active"
处理表单提交
使用 AJAX 提交表单可以提供更好的用户体验,避免页面刷新。
HTML 表单:
<form id="myForm"> <input type="text" name="username" placeholder="用户名"> <input type="password" name="password" placeholder="密码"> <button type="submit">登录</button> </form> <div id="message"></div>
jQuery AJAX 提交:
$(document).ready(function() {
$("#myForm").on("submit", function(event) {
// 阻止表单的默认提交行为(页面刷新)
event.preventDefault();
// 使用 serialize() 方法快速获取表单数据
// 它会生成如 "username=John&password=123456" 的字符串
var formData = $(this).serialize();
$.ajax({
url: "login.php",
method: "POST",
data: formData,
success: function(response) {
$("#message").html(response).css("color", "green");
},
error: function() {
$("#message").text("登录失败,请检查网络!").css("color", "red");
}
});
});
});
serialize() 是一个非常有用的方法,它可以自动将表单中的所有输入字段序列化为 URL 编码的字符串。
错误处理
健壮的应用必须处理请求过程中可能出现的错误(如网络中断、服务器 500 错误等)。
$.ajax({
url: "some-api-endpoint",
method: "GET",
success: function(data) {
console.log("成功:", data);
},
error: function(xhr, status, error) {
// xhr: XMLHttpRequest 对象
// status: 错误状态 ("error", "timeout", "parsererror" 等)
// error: 错误信息
console.error("请求出错! 状态: " + status + ", 错误: " + error);
$("#error-message").text("无法加载数据,请稍后再试。");
},
complete: function(xhr, status) {
// 无论成功失败都会执行
console.log("请求完成,状态: " + status);
}
});
最佳实践与总结
- 使用事件委托: 如果动态加载的元素也需要绑定 AJAX 事件,使用
$(document).on("click", ".dynamic-element", ...)。 - 设置超时: 在
$.ajax()中设置timeout属性,防止请求长时间挂起。timeout: 5000 // 5秒超时
- 使用
$(document).ready(): 确保 DOM 完全加载后再执行 jQuery 代码。 - 清晰的错误提示: 为用户提供友好的错误信息,而不是直接显示技术错误。
- 考虑安全性: 始终对从服务器接收的数据和发送到服务器的数据进行验证和清理,以防止 XSS 和 SQL 注入等攻击。
- 链式调用: 可以将回调函数链式化,但注意保持代码的可读性。
现代替代方案:Fetch API
随着浏览器的发展,原生 JavaScript 提供了更现代、更强大的 Fetch API,它基于 Promise,是 AJAX 的现代替代品。
Fetch API 示例(对比 jQuery AJAX):
jQuery AJAX:
$.ajax({
url: 'https://api.github.com/users/octocat',
success: function(data) {
console.log(data.login);
},
error: function() {
console.error('请求失败');
}
});
Fetch API:
fetch('https://api.github.com/users/octocat')
.then(response => {
// 检查响应是否成功
if (!response.ok) {
throw new Error('网络响应不正常');
}
// 将响应体解析为 JSON
return response.json();
})
.then(data => {
// 处理数据
console.log(data.login);
})
.catch(error => {
// 处理错误
console.error('请求出错:', error);
});
Fetch API 的优势:
- 原生支持: 无需引入任何库。
- Promise 基础: 语法更简洁,避免了回调地狱。
- 更灵活: 提供了对 Request 和 Response 对象的细粒度控制。
对于新项目,强烈推荐使用 Fetch API,它代表了 Web API 的未来方向,如果你维护着一个基于 jQuery 的旧项目,或者需要一个兼容性极好的解决方案,jQuery AJAX 仍然是一个非常可靠和高效的选择。
