主页/jQuery教程/参考手册/jQuery Ajax参考手册

jQuery Ajax参考手册

4,256字
18–27 分钟

核心Ajax方法:$.ajax()

目录

$.ajax() 是 jQuery 中所有 Ajax 请求的基础方法,提供了一套完整且可配置的接口。其基本语法为 $.ajax( url [, settings ] )$.ajax( [settings ] ),通过一个 settings 对象来定义请求的各项参数。该方法返回一个 jqXHR 对象,该对象实现了 Promise 接口,可用于链式回调。

版本变更说明
1.0引入基础 Ajax 功能,包括 $.ajax()$.get()$.post()load() 方法。
1.2引入 JSONP 支持,允许跨域请求。
1.4增加对 jqXHR 对象的支持,并引入 $.param() 方法的增强版本。
1.5$.ajax() 返回的 jqXHR 对象实现了 Promise 接口,增加了 .then().done().fail() 等方法。
1.9移除了 $.ajax()jsonpscript 类型的特殊处理,使其更规范化。
3.0增强了 Promise 兼容性,jqXHR 对象遵循 Promises/A+ 标准。$.ajax()successerrorcomplete 回调仍可用,但推荐使用 .done().fail().always()
4.0增加了对二进制数据(包括 FormData)的原生支持,无需手动禁用 processData。移除了 JSONP 的自动推断逻辑,不再将包含回调参数的 JSON 请求自动转为 JSONP。改进了对 Trusted Types 和 CSP 的支持,异步脚本请求优先使用 <script> 标签以避免 CSP 错误。部分 Ajax 全局事件别名被弃用。

常用配置选项

$.ajax()settings 对象包含大量选项,用于精细控制请求。以下表格列举了最常用的核心选项。

选项说明引入/变更版本
url字符串,指定请求的目标 URL。1.0
type / method字符串,指定 HTTP 方法,如 "GET""POST""PUT""DELETE"。从 1.9.0 起,推荐使用 method1.0 (type), 1.9.0 (method)
data对象、字符串或数组,表示发送到服务器的数据。如果是对象,jQuery 会将其转换为查询字符串。对于 GET 请求,数据会附加到 URL 后。1.0
processData布尔值,默认为 true,表示将非字符串的 data 转换为查询字符串。如果发送 FormData 或其他二进制数据,应设为 false1.0 (行为在 4.0 优化)
contentType字符串,指定发送数据到服务器时使用的 HTTP 内容类型。默认为 "application/x-www-form-urlencoded; charset=UTF-8"。设为 false 可避免设置任何类型,常用于发送 FormData1.0
dataType字符串,指定期望从服务器返回的数据类型。可取值包括 "xml""html""script""json""jsonp""text"。如果未指定,jQuery 会智能推断。1.0
headers对象,包含要随请求发送的额外 HTTP 头信息。1.5
async布尔值,默认为 true,表示请求是异步的。从 jQuery 3.0 开始,不推荐使用同步请求,因其对用户体验有负面影响。1.0
timeout数字,设置请求的超时时间(毫秒)。1.0
beforeSend函数,在发送请求之前调用,允许修改 jqXHR 对象。返回 false 可取消请求。1.0
success函数,请求成功完成后调用。函数接收三个参数:返回的数据、状态文本字符串、jqXHR 对象。1.0
error函数,请求失败时调用。函数接收三个参数:jqXHR 对象、状态文本字符串、错误异常对象。1.0
complete函数,请求完成后(无论成功或失败)调用。函数接收两个参数:jqXHR 对象、状态文本字符串。1.0
context对象,用于设置所有 Ajax 相关回调函数中的 this 值。1.1.1
global布尔值,默认为 true,表示是否触发全局 Ajax 事件。1.0
xhr函数,用于创建 XMLHttpRequest 对象的回调函数,可在其中进行自定义配置,如添加 withCredentials1.5.1
scriptAttrs对象,用于定义当使用 <script> 标签传输(如跨域脚本请求)时,附加到该标签上的属性。4.0
crossDomain布尔值,默认为 false(同域),设为 true 可强制将请求视为跨域。1.5
username / password字符串,用于响应需要 HTTP 身份验证的请求。1.0

便捷方法

jQuery 提供了多个基于 $.ajax() 封装的便捷方法,用于简化常见类型的 Ajax 请求。这些方法接收较少的参数,并预设了合适的请求类型或数据处理方式。

方法说明版本引入
$.get()使用 HTTP GET 方法从服务器加载数据。语法为 $.get( url [, data ] [, success ] [, dataType ] )1.0
$.post()使用 HTTP POST 方法向服务器发送数据。语法为 $.post( url [, data ] [, success ] [, dataType ] )1.0
$.getJSON()使用 GET 方法加载 JSON 数据,等同于 $.get() 并将 dataType 设为 "json"1.0
$.getScript()使用 GET 方法加载并执行一个 JavaScript 文件。1.0
load()从服务器加载 HTML 内容,并直接将返回的内容插入到匹配的元素中。语法为 .load( url [, data ] [, complete ] )1.0

元素级Ajax:load()

load() 方法是一个与 DOM 操作紧密结合的便捷 Ajax 方法。它执行一个 Ajax GET 请求(如果提供了 data 对象,则为 POST 请求),然后将返回的 HTML 字符串直接设置为匹配元素的内容。其强大之处在于,可以在 url 后附加一个空格和 jQuery 选择器,来过滤返回的 HTML,只插入匹配的部分。例如,$('#result').load('/page.html #container') 会从 /page.html 加载内容,但只插入 id 为 container 的元素内容。

全局Ajax事件

jQuery 提供了一组全局 Ajax 事件,可以在任何元素上监听,用于在应用的全局层面处理与 Ajax 请求相关的反馈,例如显示或隐藏全局的加载指示器。这些事件可以通过 .on() 方法绑定到 document 或其他永久存在的元素上。

事件说明版本引入
ajaxStart当第一个 Ajax 请求开始时触发。1.0
ajaxSend在每个 Ajax 请求将要被发送之前触发。1.0
ajaxSuccess在每个 Ajax 请求成功完成时触发。1.0
ajaxError在每个 Ajax 请求失败时触发。1.0
ajaxComplete在每个 Ajax 请求完成时(无论成功或失败)触发。1.0
ajaxStop当所有 Ajax 请求都已完成时触发。1.0

表单序列化

表单序列化方法用于将表单元素的值转换成适合 URL 查询字符串或 Ajax 请求体的格式。

方法说明版本引入
.serialize()将一组表单元素编码为查询字符串。1.0
.serializeArray()将一组表单元素编码为一个由名称和值对象组成的数组。1.2
$.param()创建一个数组或普通对象的序列化表示形式,可用于 URL 查询字符串或 Ajax 请求。1.2

低级接口与工具

除了核心请求方法,jQuery 还提供了一些底层工具函数,用于预处理或直接操作 Ajax 流程。

方法说明版本引入
$.ajaxPrefilter()在每个请求被 $.ajax() 处理之前,对请求选项进行修改或添加自定义处理。1.5
$.ajaxTransport()创建一个对象,定义如何实际传输 Ajax 数据,用于扩展或替换内置传输机制。1.5
$.ajaxSetup()为将来的 Ajax 请求设置默认值。不推荐使用,因为它会全局影响所有请求,可能导致难以预料的副作用。1.1

跨域请求处理

jQuery 主要通过两种机制处理跨域请求:JSONP 和 CORS。

JSONP(JSON with Padding)通过动态创建 <script> 标签来加载数据,仅支持 GET 请求。通过在 $.ajax() 中设置 dataType: "jsonp" 来启用。jQuery 会自动处理回调函数。需要注意的是,从 jQuery 4.0 开始,移除了将普通 JSON 请求自动提升为 JSONP 的逻辑,必须显式指定 dataType: "jsonp" 才能发起 JSONP 请求。

CORS(Cross-Origin Resource Sharing)是一种更现代、更强大的机制,需要服务器在响应头中设置正确的 Access-Control-Allow-Origin 等字段。jQuery 对于 CORS 的支持与标准 XHR 一致。对于跨域的异步脚本请求,jQuery 4.0 优先使用 <script> 标签,以更好地遵守 CSP 规则,除非指定了自定义的 headers 选项(此时会回退到 XHR)。

版本演进与迁移要点

jQuery 的 Ajax 模块在多个主要版本中经历了重要变革。理解这些变化对于升级和维护旧项目至关重要。

版本主要变更迁移建议
1.x奠定了 Ajax 模块的基础,引入核心方法和 JSONP 支持。对于非常旧的版本(<1.5),jqXHR 对象不完整,需注意回调处理。
1.5jqXHR 对象实现 Promise 接口,引入预处理和传输机制。可开始使用 .done().fail() 等 Promise 风格回调。
3.0增强 Promise 兼容性,弃用同步请求。优先使用异步请求,用 .done()/.fail() 替代 success/error
4.0重大变更:原生支持二进制数据(包括 FormData)。移除 JSONP 自动推断。对跨域脚本请求优先使用 <script> 标签以符合 CSP。部分全局事件别名被弃用。检查所有涉及二进制数据发送的代码,确保不再依赖 processData: false 的旧有变通方式。明确设置 dataType: "jsonp" 而非依赖自动转换。测试 CSP 相关代码。

jQuery Ajax 参考手册系统地梳理了从核心配置、便捷方法、全局事件到跨域处理的完整知识体系。从 1.0 版本引入基础功能,到 4.0 版本对现代 Web 标准(如二进制数据、CSP)的全面拥抱,jQuery Ajax 模块始终致力于为开发者提供强大、统一且跨浏览器的异步通信方案。这份手册旨在作为日常开发中的快速查阅工具,帮助开发者高效应对各种数据交互场景。