---
title: XMLHttpRequest
slug: Web/API/XMLHttpRequest
tags:
- AJAX
- API
- HTTP
- Reference
- Web
- XHR
- XMLHttpRequest
translation_of: Web/API/XMLHttpRequest
---
{{DefaultAPISidebar("XMLHttpRequest")}}
XMLHttpRequest
(XHR)对象用于与服务器交互。通过 XMLHttpRequest 可以在不刷新页面的情况下请求特定 URL,获取数据。这允许网页在不影响用户操作的情况下,更新页面的局部内容。XMLHttpRequest
在 {{Glossary("AJAX")}} 编程中被大量使用。
{{InheritanceDiagram(650, 150)}}
尽管名称如此,XMLHttpRequest
可以用于获取任何类型的数据,而不仅仅是 XML。它甚至支持 HTTP 以外的协议(包括 file:// 和 FTP),尽管可能受到更多出于安全等原因的限制。
如果您的通信流程需要从服务器端接收事件或消息数据,请考虑通过 {{domxref("EventSource")}} 接口使用 server-sent events。对于全双工的通信, WebSocket 可能是更好的选择。
构造函数
- {{domxref("XMLHttpRequest.XMLHttpRequest", "XMLHttpRequest()")}}
- 该构造函数用于初始化一个
XMLHttpRequest
实例对象。在调用下列任何其他方法之前,必须先调用该构造函数,或通过其他方式,得到一个实例对象。
属性
此接口继承了 {{domxref("XMLHttpRequestEventTarget")}} 和 {{domxref("EventTarget")}} 的属性。
- {{domxref("XMLHttpRequest.onreadystatechange")}}
- 当
readyState
属性发生变化时,调用的 {{event("Event_handlers", "event handler")}}。
- {{domxref("XMLHttpRequest.readyState")}} {{readonlyinline}}
- 返回 一个无符号短整型(
unsigned short
)数字,代表请求的状态码。
- {{domxref("XMLHttpRequest.response")}} {{readonlyinline}}
- 返回一个 {{domxref("ArrayBuffer")}}、{{domxref("Blob")}}、{{domxref("Document")}},或 {{domxref("DOMString")}},具体是哪种类型取决于 {{domxref("XMLHttpRequest.responseType")}} 的值。其中包含整个响应实体(response entity body)。
- {{domxref("XMLHttpRequest.responseText")}} {{readonlyinline}}
- 返回一个 {{domxref("DOMString")}},该 {{domxref("DOMString")}} 包含对请求的响应,如果请求未成功或尚未发送,则返回
null
。
- {{domxref("XMLHttpRequest.responseType")}}
- 一个用于定义响应类型的枚举值(enumerated value)。
- {{domxref("XMLHttpRequest.responseURL")}} {{readonlyinline}}
- 返回经过序列化(serialized)的响应 URL,如果该 URL 为空,则返回空字符串。
- {{domxref("XMLHttpRequest.responseXML")}} {{readonlyinline}}
- 返回一个 {{domxref("Document")}},其中包含该请求的响应,如果请求未成功、尚未发送或时不能被解析为 XML 或 HTML,则返回
null
。
- {{domxref("XMLHttpRequest.status")}} {{readonlyinline}}
- 返回一个无符号短整型(
unsigned short
)数字,代表请求的响应状态。
- {{domxref("XMLHttpRequest.statusText")}} {{readonlyinline}}
- 返回一个 {{domxref("DOMString")}},其中包含 HTTP 服务器返回的响应状态。与 {{domxref("XMLHTTPRequest.status")}} 不同的是,它包含完整的响应状态文本(例如,"
200 OK
")。
- {{domxref("XMLHttpRequest.timeout")}}
- 一个无符号长整型(
unsigned long
)数字,表示该请求的最大请求时间(毫秒),若超出该时间,请求会自动终止。
- {{domxref("XMLHttpRequestEventTarget.ontimeout")}}
- 当请求超时调用的 {{event("Event_handlers", "event handler")}}。{{ gecko_minversion_inline(" 12.0 ")}}
- {{domxref("XMLHttpRequest.upload")}} {{readonlyinline}}
- {{domxref("XMLHttpRequestUpload")}},代表上传进度。
- {{domxref("XMLHttpRequest.withCredentials")}}
- 一个{{domxref("Boolean", "布尔值")}},用来指定跨域
Access-Control
请求是否应当带有授权信息,如 cookie 或授权 header 头。
非标准属性
- {{domxref("XMLHttpRequest.channel")}}{{ReadOnlyInline}}
- 一个 {{Interface("nsIChannel")}},对象在执行请求时使用的通道。
- {{domxref("XMLHttpRequest.mozAnon")}}{{ReadOnlyInline}}
- 一个布尔值,如果为真,请求将在没有 cookie 和身份验证 header 头的情况下发送。
- {{domxref("XMLHttpRequest.mozSystem")}}{{ReadOnlyInline}}
- 一个布尔值,如果为真,则在请求时不会强制执行同源策略。
- {{domxref("XMLHttpRequest.mozBackgroundRequest")}}
- 一个布尔值,它指示对象是否是后台服务器端的请求。
- {{domxref("XMLHttpRequest.mozResponseArrayBuffer")}}{{gecko_minversion_inline("2.0")}} {{obsolete_inline("6")}} {{ReadOnlyInline}}
- 一个 {{jsxref("ArrayBuffer")}},把请求的响应作为一个 JavaScript TypedArray。
- {{domxref("XMLHttpRequest.multipart")}}{{obsolete_inline("22")}}
- 这是一个 Gecko 专有属性,是一个布尔值,已在 Firefox/Gecko 22 中被删除。请考虑使用 Server-Sent Event、Web Socket、或来自进度事件的
responseText
代替。
事件处理器
作为 XMLHttpRequest
实例的属性之一,所有浏览器都支持 onreadystatechange
。
后来,许多浏览器实现了一些额外的事件(onload
、onerror
、onprogress
等)。详见Using XMLHttpRequest。
更多现代浏览器,包括 Firefox,除了可以设置 on*
属性外,也提供标准的监听器 {{domxref("EventTarget.addEventListener", "addEventListener()")}} API 来监听XMLHttpRequest
事件。
方法
- {{domxref("XMLHttpRequest.abort()")}}
- 如果请求已被发出,则立刻中止请求。
- {{domxref("XMLHttpRequest.getAllResponseHeaders()")}}
- 以字符串的形式返回所有用 {{Glossary("CRLF")}} 分隔的响应头,如果没有收到响应,则返回
null
。
- {{domxref("XMLHttpRequest.getResponseHeader()")}}
- 返回包含指定响应头的字符串,如果响应尚未收到或响应中不存在该报头,则返回
null
。
- {{domxref("XMLHttpRequest.open()")}}
- 初始化一个请求。该方法只能在 JavaScript 代码中使用,若要在 native code 中初始化请求,请使用
openRequest()
。
- {{domxref("XMLHttpRequest.overrideMimeType()")}}
- 覆写由服务器返回的 MIME 类型。
- {{domxref("XMLHttpRequest.send()")}}
- 发送请求。如果请求是异步的(默认),那么该方法将在请求发送后立即返回。
- {{domxref("XMLHttpRequest.setRequestHeader()")}}
- 设置 HTTP 请求头的值。必须在
open()
之后、send()
之前调用 setRequestHeader()
方法。
非标准方法
- {{domxref("XMLHttpRequest.init()")}}
- 在 C++ 代码中初始化一个 XHR 对象。
警告:该方法不能在 JavaScript 代码中使用。
- {{domxref("XMLHttpRequest.openRequest()")}}
- 初始化一个请求。这个方法只能在原生 C++ 代码中使用;如果用 JavaScript 代码来初始化请求,使用
open()
代替。可参考 open()
的文档。
- {{domxref("XMLHttpRequest.sendAsBinary()")}}{{deprecated_inline()}}
send()
方法的变体,用来发送二进制数据。
事件
- {{domxref("XMLHttpRequest/abort_event", "abort")}}
- 当 request 被停止时触发,例如当程序调用 {{domxref("XMLHttpRequest.abort()")}} 时。
也可以使用 {{domxref("XMLHttpRequestEventTarget/onabort", "onabort")}} 属性。
- {{domxref("XMLHttpRequest/error_event", "error")}}
- 当 request 遭遇错误时触发。
也可以使用 {{domxref("XMLHttpRequestEventTarget/onerror", "onerror")}} 属性
- {{domxref("XMLHttpRequest/load_event", "load")}}
- {{domxref("XMLHttpRequest")}}请求成功完成时触发。
也可以使用 {{domxref("XMLHttpRequestEventTarget/onload", "onload")}} 属性.
- {{domxref("XMLHttpRequest/loadend_event", "loadend")}}
- 当请求结束时触发, 无论请求成功 ( {{domxref("XMLHttpRequest/load_event", "load")}}) 还是失败 ({{domxref("XMLHttpRequest/abort_event", "abort")}} 或 {{domxref("XMLHttpRequest/error_event", "error")}})。
也可以使用 {{domxref("XMLHttpRequestEventTarget/onloadend", "onloadend")}} 属性。
- {{domxref("XMLHttpRequest/loadstart_event", "loadstart")}}
- 接收到响应数据时触发。
也可以使用 {{domxref("XMLHttpRequestEventTarget/onloadstart", "onloadstart")}} 属性。
- {{domxref("XMLHttpRequest/progress_event", "progress")}}
- 当请求接收到更多数据时,周期性地触发。
也可以使用 {{domxref("XMLHttpRequestEventTarget/onprogress", "onprogress")}} 属性。
- {{domxref("XMLHttpRequest/timeout_event", "timeout")}}
- 在预设时间内没有接收到响应时触发。
也可以使用 {{domxref("XMLHttpRequestEventTarget/ontimeout", "ontimeout")}} 属性。
规范
规范 |
状态 |
注释 |
{{SpecName('XMLHttpRequest')}} |
{{Spec2('XMLHttpRequest')}} |
Live standard, latest version |
浏览器兼容性
此页面中的兼容性表是由结构化数据生成的。如果您想贡献数据,请前往 https://github.com/mdn/browser-compat-data 。
{{Compat("api.XMLHttpRequest")}}
参见