使用XMLHttpRequest (XHR)对象可以与服务器交互。您可以从URL获取数据,而无需让整个的页面刷新。这使得Web页面可以只更新页面的局部,而不影响用户的操作。XMLHttpRequest在 Ajax 编程中被大量使用。

尽管名称如此,XMLHttpRequest可以用于获取任何类型的数据,而不仅仅是XML,它还支持   HTTP以外的协议(包括文件和ftp)。

如果您的通信需要从服务器接收事件或消息数据,请考虑通过EventSource接口使用 server-sent events。对于 full-duplex 通信, WebSockets 可能是更好的选择。

构造方法

XMLHttpRequest()
构造函数初始化一个 XMLHttpRequest 对象。必须在所有其他方法被调用前调用构造函数。

属性

此接口继承了 XMLHttpRequestEventTargetEventTarget 的属性。

XMLHttpRequest.onreadystatechange

当readyState属性发生变化时调用的EventHandler

XMLHttpRequest.readyState 只读

返回 一个unsigned short 即无符号短整型,请求的状态码。

XMLHttpRequest.response 只读

返回ArrayBufferBlobDocumentDOMString},具体是哪种类型取决于XMLHttpRequest.responseType的值。其中包含响应体body。

XMLHttpRequest.responseText 只读

返回一个DOMString},该DOMString}包含对请求的响应,如果请求未成功或尚未发送,则返回null。

XMLHttpRequest.responseType

定义响应类型的枚举值。

XMLHttpRequest.responseURL 只读

返回响应的序列化URL,如果URL为空,则返回空字符串。

XMLHttpRequest.responseXML 只读 Not available to workers

返回一个Document,其中包含该请求的响应,如果请求未成功、尚未发送或不能解析为XML或HTML,则返回null。

XMLHttpRequest.status 只读

返回  unsigned short 即无符号短整型请求响应状态。

XMLHttpRequest.statusText 只读

返回一个DOMString},其中包含HTTP服务器返回的响应状态。与 XMLHTTPRequest.status不同的是,它包括响应状态的整个文本(例如,“200 OK”)。

注意:根据HTTP/2规范(8.1.2.4响应伪标头字段),HTTP/2没有定义一种方式来携带HTTP/1.1状态行中包含的版本或原因短语。

XMLHttpRequest.timeout

unsigned long 即无符号长整型,表示该请求的最大请求时间(毫秒),超过该时间请求会自动结束。

XMLHttpRequestEventTarget.ontimeout

当请求超时调用的EventHandler。{ { gecko_minversion_inline(" 12.0 ")} }

XMLHttpRequest.upload 只读

XMLHttpRequestUpload,表示上传过程。

XMLHttpRequest.withCredentials

Boolean,用来指定跨域的请求是否应该使用证书(如cookie或授权header头)。

XMLHttpRequest.channel只读

nsIChannel,对象在执行请求时使用的通道。

XMLHttpRequest.mozAnon只读

一个布尔值,如果为真,请求将在没有cookie和身份验证header头的情况下发送。

XMLHttpRequest.mozSystem只读

一个布尔值,如果为真,则在请求时不会强制执行同源策略。

XMLHttpRequest.mozBackgroundRequest

一个布尔值,它指示对象是否是后台服务器端的请求

XMLHttpRequest.mozResponseArrayBuffer 已废弃 Gecko 6 只读

一个ArrayBuffer类型,把请求的响应作为一个TypedArrays。

XMLHttpRequest.multipart已废弃 Gecko 22

这个Gecko的独有属性,是一个布尔值,在Firefox/Gecko 22中被删除了。请使用Server-Sent EventsWeb Sockets, 或来自进度事件的responseText代替。

方法

XMLHttpRequest.abort()

如果请求已经被发送,则立刻中止请求.

XMLHttpRequest.getAllResponseHeaders()

以字符串的形式返回所有用CRLF分隔的响应头,如果没有收到响应,则返回null。

XMLHttpRequest.getResponseHeader()

返回包含指定响应头的字符串,如果响应尚未收到或响应中不存在该报头,则返回null。

XMLHttpRequest.open()

初始化一个请求。该方法只能JavaScript代码中使用,若要在native code中初始化请求,请使用openRequest()。

XMLHttpRequest.overrideMimeType()

重写由服务器返回的MIME type。

XMLHttpRequest.send()

发送请求。如果请求是异步的(默认),那么该方法将在请求发送后立即返回。

XMLHttpRequest.setRequestHeader()

设置HTTP请求头的值。您必须在open()之后、send()之前调用setRequestHeader()这个方法。

非标准方法

init()

在 C++代码中初始化一个XHR对象.

警告: 该方法不能在 JavaScript 代码中使用.

openRequest()

初始化一个请求. 这个方法用于本地代码; 如果用JavaScript 代码来初始化请求, 使用 open()代替. 看文档open().

XMLHttpRequest.sendAsBinary()

send()方法的变体,用来发送二进制数据。

规范

规范     状态     注释
XMLHttpRequest Living Standard     Live standard, latest version


 

 

浏览器兼容性

FeatureChromeEdgeFirefoxInternet ExplorerOperaSafari
Basic support1 Yes17 Yes1.2
onreadystatechange112171 Yes1.2
readyState11217 Yes1.2
response Yes12 Yes ? Yes Yes
responseText Yes12 Yes ?2 Yes10
responseType3112610187
responseURL371432 No248
responseXML Yes12 Yes3 Yes Yes Yes
status112171 Yes1.2
statusText112171 Yes1.2
timeout2912128

17

12 — 16

Yes
upload112 Yes ? Yes10
withCredentials Yes123.54105124
abort112 Yes

7

56

Yes1.2
getAllResponseHeaders11247

7

56

Yes1.2
getResponseHeader112 Yes7

7

56

Yes1.2
open112 Yes8

7

56

Yes1.2
overrideMimeType112 Yes

11

56

Yes1.2
send1121

7

56

Yes1.2
sendAsBinary No9 No2 — 31 No No No
setRequestHeader112 Yes

7

56

Yes1.2
FeatureAndroid webviewChrome for AndroidEdge mobileFirefox for AndroidOpera AndroidiOS SafariSamsung Internet
Basic support Yes1124 Yes ? Yes
onreadystatechange11 Yes4 Yes ? Yes
readyState Yes1 Yes4 Yes ? Yes
response Yes Yes Yes Yes Yes ? Yes
responseText Yes Yes Yes Yes Yes ? Yes
responseType5555 Yes50 Yes ?6.0
responseURL3737 ?3224 ? Yes
responseXML Yes Yes Yes Yes3 Yes Yes Yes
status Yes Yes Yes4 Yes ? Yes
statusText Yes1 Yes4 Yes ? Yes
timeout Yes Yes Yes Yes Yes ? Yes
upload Yes1 ? ? Yes ? Yes
withCredentials Yes Yes ?44 Yes ? Yes
abort Yes Yes Yes Yes Yes ? Yes
getAllResponseHeaders Yes Yes Yes47 Yes ? Yes
getResponseHeader Yes1 Yes Yes7 Yes ? Yes
open Yes1 Yes Yes8 Yes Yes Yes
overrideMimeType Yes1 Yes Yes Yes Yes Yes
send Yes1 Yes4 Yes Yes Yes
sendAsBinary No9 No9 No4 — 31 No No No
setRequestHeader Yes1 Yes Yes Yes Yes Yes

1. Internet Explorer version 5 and 6 supported ajax calls using ActiveXObject()

2. Before IE 10, the value of XMLHttpRequest.responseText could be read only once the request was complete.

3. Prior to Firefox 51, an error parsing the received data added a <parsererror> node to the top of the Document and then returned the Document in whatever state it happens to be in. This was inconsistent with the specification. Starting with Firefox 51, this scenario now correctly returns null as per the spec.

4. Starting with Firefox 11, it's no longer supported to use the withCredentials attribute when performing synchronous requests. Attempting to do so throws an NS_ERROR_DOM_INVALID_ACCESS_ERR exception.

5. Internet Explorer versions 8 and 9 supported cross-domain requests (CORS) using XDomainRequest

6. Implemented via ActiveXObject

7. Starting from Firefox 49, empty headers are returned as empty strings in case the preference network.http.keep_empty_response_headers_as_empty_string is set to true, defaulting to false. Before Firefox 49 empty headers had been ignored. Since Firefox 50 the preference defaults to true.

8. Starting in Firefox 30, synchronous requests on the main thread have been deprecated due to their negative impact on performance and the user experience. Therefore, the async parameter may not be false except in a Worker.

9. There is a polyfill available to support sendAsBinary().

相关