recursal/MDN huggingface dataset:
XMLHttpRequest: load event
==========================

当一个`XMLHttpRequest`请求完成的时候会触发`load` 事件。

|  |  |
| --- | --- |
| Bubbles | No |
| Cancelable | No |
| Interface | `ProgressEvent` |
| Event handler property | `onload` |

示例
--

### 在线示例

#### HTML


```html
<div class="controls">
  <input
 class="xhr success"
 type="button"
 name="xhr"
 value="Click to start XHR (success)" />
  <input
 class="xhr error"
 type="button"
 name="xhr"
 value="Click to start XHR (error)" />
  <input
 class="xhr abort"
 type="button"
 name="xhr"
 value="Click to start XHR (abort)" />
</div>

<textarea readonly class="event-log"></textarea>
```


```
.event-log {
  width: 25rem;
  height: 4rem;
  border: 1px solid black;
  margin: 0.5rem;
  padding: 0.2rem;
}

input {
  width: 11rem;
  margin: 0.5rem;
}
```


#### JS


```js
const xhrButtonSuccess = document.querySelector(".xhr.success");
const xhrButtonError = document.querySelector(".xhr.error");
const xhrButtonAbort = document.querySelector(".xhr.abort");
const log = document.querySelector(".event-log");

function handleEvent(e) {
  log.textContent =
    log.textContent + `${e.type}: ${e.loaded} bytes transferred\n`;
}

function addListeners(xhr) {
  xhr.addEventListener("loadstart", handleEvent);
  xhr.addEventListener("load", handleEvent);
  xhr.addEventListener("loadend", handleEvent);
  xhr.addEventListener("progress", handleEvent);
  xhr.addEventListener("error", handleEvent);
  xhr.addEventListener("abort", handleEvent);
}

function runXHR(url) {
  log.textContent = "";

  const xhr = new XMLHttpRequest();
  addListeners(xhr);
  xhr.open("GET", url);
  xhr.send();
  return xhr;
}

xhrButtonSuccess.addEventListener("click", () => {
  runXHR("dgszyjnxcaipwzy.jpg");
});

xhrButtonError.addEventListener("click", () => {
  runXHR("https://somewhere.org/i-dont-exist");
});

xhrButtonAbort.addEventListener("click", () => {
  runXHR("dgszyjnxcaipwzy.jpg").abort();
});
```


#### 结果

规范
--

| Specification |
| --- |
| XMLHttpRequest Standard # event-xhr-load |
| XMLHttpRequest Standard # handler-xhr-onload |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

参见
--

* 相关事件：`loadstart`、`loadend`、`progress`、`error`、`abort`
* 监测进度
XMLHttpRequest: error 事件
========================

当请求遇到错误时，将触发`error` 事件。

|  |  |
| --- | --- |
| 可冒泡 | No |
| 可取消 | No |
| 接口 | `ProgressEvent` |
| 事件处理程序属性 | `onerror` |

示例
--

### 在线示例

#### HTML


```html
<div class="controls">
  <input
 class="xhr success"
 type="button"
 name="xhr"
 value="Click to start XHR (success)" />
  <input
 class="xhr error"
 type="button"
 name="xhr"
 value="Click to start XHR (error)" />
  <input
 class="xhr abort"
 type="button"
 name="xhr"
 value="Click to start XHR (abort)" />
</div>

<textarea readonly class="event-log"></textarea>
```


```
.event-log {
  width: 25rem;
  height: 4rem;
  border: 1px solid black;
  margin: 0.5rem;
  padding: 0.2rem;
}

input {
  width: 11rem;
  margin: 0.5rem;
}
```


#### JS


```js
const xhrButtonSuccess = document.querySelector(".xhr.success");
const xhrButtonError = document.querySelector(".xhr.error");
const xhrButtonAbort = document.querySelector(".xhr.abort");
const log = document.querySelector(".event-log");

function handleEvent(e) {
  log.textContent =
    log.textContent + `${e.type}: ${e.loaded} bytes transferred\n`;
}

function addListeners(xhr) {
  xhr.addEventListener("loadstart", handleEvent);
  xhr.addEventListener("load", handleEvent);
  xhr.addEventListener("loadend", handleEvent);
  xhr.addEventListener("progress", handleEvent);
  xhr.addEventListener("error", handleEvent);
  xhr.addEventListener("abort", handleEvent);
}

function runXHR(url) {
  log.textContent = "";

  const xhr = new XMLHttpRequest();
  addListeners(xhr);
  xhr.open("GET", url);
  xhr.send();
  return xhr;
}

xhrButtonSuccess.addEventListener("click", () => {
  runXHR("dgszyjnxcaipwzy.jpg");
});

xhrButtonError.addEventListener("click", () => {
  runXHR("https://somewhere.org/i-dont-exist");
});

xhrButtonAbort.addEventListener("click", () => {
  runXHR("dgszyjnxcaipwzy.jpg").abort();
});
```


#### 结果

规范
--

| Specification |
| --- |
| XMLHttpRequest Standard # event-xhr-error |
| XMLHttpRequest Standard # handler-xhr-onerror |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

参见
--

* 相关事件：`loadstart`、`load`、`progress`、`loadend`、`abort`
* 监视进度
XMLHttpRequest.responseText
===========================

**XMLHttpRequest.responseText** 在一个请求被发送后，从服务器端返回文本。

语法
--
```

var resultText = XMLHttpRequest.responseText;
```

### 取值

`DOMString` 是 `XMLHttpRequest` 返回的纯文本的值。当 `DOMString` 为 `null` 时，表示请求失败了。当`DOMString` 为 "" 时，表示这个请求还没有被 `send()`

当处理一个异步 request 的时候，尽管当前请求并没有结束，`responseText` 的返回值是当前从后端收到的内容。

当请求状态 `readyState` 变为 `XMLHttpRequest.DONE` (`4`)，且 `status` 值为 200（"OK"）时，`responseText` 是全部后端的返回数据

例子
--


```js
var xhr = new XMLHttpRequest();
xhr.open("GET", "/server", true);

// If specified, responseType must be empty string or "text"
xhr.responseType = "text";

xhr.onload = function () {
  if (xhr.readyState === xhr.DONE) {
    if (xhr.status === 200) {
      console.log(xhr.response);
      console.log(xhr.responseText);
    }
  }
};

xhr.send(null);
```

规范
--

| Specification |
| --- |
| XMLHttpRequest Standard # the-responsetext-attribute |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.
XMLHttpRequest.send()
=====================

**`XMLHttpRequest.send()`** 方法用于发送 HTTP 请求。如果是异步请求（默认为异步请求），则此方法会在请求发送后立即返回；如果是同步请求，则此方法直到响应到达后才会返回。`XMLHttpRequest.send()` 方法接受一个可选的参数，其作为请求主体；如果请求方法是 GET 或者 HEAD，则应将请求主体设置为 null。

如果没有使用 `setRequestHeader()` 方法设置 `Accept` 头部信息，则会发送带有 `"* / *"` 的`Accept` 头部。

**备注：** 请注意不要使用一个简单的 ArrayBuffer 对象作为参数，ArrayBuffer 已经不再是 AJAX 规范的一部分，请改用 ArrayBufferView（有关信息请参考兼容性列表。）

语法
--
```

XMLHttpRequest.send(body)
```

### 参数

`body` 可选

在 XHR 请求中要发送的数据体。可以是：

* 可以为 `Document`, 在这种情况下，它在发送之前被序列化。
* 为 `XMLHttpRequestBodyInit`, 从 per the Fetch spec （规范中）可以是 `Blob`, `BufferSource`, `FormData`, `URLSearchParams`, 或者 `USVString` 对象。
* `null`

如果 body 没有指定值，则默认值为 `null`。

### 返回值

`undefined`.

### 例外

| Exception | Description |
| --- | --- |
| `InvalidStateError` | `send()` has already been invoked for the request, and/or the request is complete. |
| `NetworkError` | The resource type to be fetched is a Blob, and the method is not `GET`. |


```js
XMLHttpRequest.send();
XMLHttpRequest.send(ArrayBuffer data);
XMLHttpRequest.send(ArrayBufferView data);
XMLHttpRequest.send(Blob data);
XMLHttpRequest.send(Document data);
XMLHttpRequest.send(DOMString? data);
XMLHttpRequest.send(FormData data);
```


如果发送的数据是 Document 对象，需要在发送之前将其序列化。当发送一个 Document 对象时，Firefox 3 之前的版本都是使用 UTF-8 编码发送请求的；FireFox 3 则使用由 `body.xmlEncoding` 指定的编码格式正确的发送文档，但如果未指定编码格式，则使用 UTF-8 编码格式发送。

如果是一个 nsIInputStream 接口，它必须与 nsIUploadChannel 的 `setUploadStream()` 方法兼容。在这种情况下，将 Content-Length 的头部添加到请求中，它的值则使用 nsIInputStream 接口的 `available()` 方法获取。任何报头包括在数据流顶部的都会被当做报文主体。所以，应该在发送请求即调用 `send()` 方法之前使用`setRequestHeader()` 方法设置 Content-Type 头部来指定数据流的 MIME 类型。

发送二进制内容的最佳方法（如上传文件）是使用一个与 `send()` 方法结合的 ArrayBufferView 或者 Blobs

案例：GET
------
```

var xhr = new XMLHttpRequest();
xhr.open('GET', '/server', true);

xhr.onload = function () {
   // 请求结束后，在此处写处理代码
};

xhr.send(null);
// xhr.send('string');
// xhr.send(new Blob());
// xhr.send(new Int8Array());
// xhr.send(document);
```

案例：POST
-------
```

var xhr = new XMLHttpRequest();
xhr.open("POST", '/server', true);

//发送合适的请求头信息
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

xhr.onload = function () {
    // 请求结束后，在此处写处理代码
};
xhr.send("foo=bar&lorem=ipsum");
// xhr.send('string');
// xhr.send(new Blob());
// xhr.send(new Int8Array());
// xhr.send(document);
```

规范
--

| Specification |
| --- |
| XMLHttpRequest Standard # the-send()-method |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

参见
--

* 使用 XMLHttpRequest
* XMLHttpRequest 中的 HTML
XMLHttpRequest.upload
=====================

**XMLHttpRequest.upload 属性返回一个** `XMLHttpRequestUpload` (en-US)对象，用来表示上传的进度。这个对象是不透明的，但是作为一个`XMLHttpRequestEventTarget`，可以通过对其绑定事件来追踪它的进度。

可以被绑定在 upload 对象上的事件监听器如下：

| 事件 | 相应属性的信息类型 |
| --- | --- |
| `onloadstart` | 获取开始 |
| `onprogress` | 数据传输进行中 |
| `onabort` | 获取操作终止 |
| `onerror` | 获取失败 |
| `onload` | 获取成功 |
| `ontimeout` | 获取操作在用户规定的时间内未完成 |
| `onloadend` | 获取完成（不论成功与否） |

规范
--

| Specification |
| --- |
| XMLHttpRequest Standard # the-upload-attribute |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.
loadend
=======

loadend 事件总是在一个资源的加载进度停止之后被触发 (例如，在已经触发“error”，“abort”或“load”事件之后)。这适用于 `XMLHttpRequest` 调用，以及 `<img>` 或 `<video>` 之类元素的内容。

General info
------------

规范

Progress

接口

ProgressEvent

可冒泡

否

可取消

否

触发对象

例如`HTMLImageElement`

默认行为

无

Properties
----------

| Property | Type | Description |
| --- | --- | --- |
| `target` 只读  | `EventTarget` | The event target (the topmost target in the DOM tree). |
| `type` 只读  | `DOMString` | The type of event. |
| `bubbles` 只读  | `Boolean` | Whether the event normally bubbles or not. |
| `cancelable` 只读  | `Boolean` | Whether the event is cancellable or not. |
| `lengthComputable` 只读  | `Boolean` | Specifies whether or not the total size of the transfer is known. Read only. |
| `loaded` 只读  | unsigned long (long) | The number of bytes transferred since the beginning of the operation. This doesn't include headers and other overhead, but only the content itself. Read only. |
| `total` 只读  | unsigned long (long) | The total number of bytes of content that will be transferred during the operation. If the total size is unknown, this value is zero. Read only. |

规范
--

| Specification |
| --- |
| XMLHttpRequest Standard # event-xhr-loadend |
| XMLHttpRequest Standard # handler-xhr-onloadend |

参见
--

* 相关事件：`loadstart`、`load`、`progress`、`error`、`abort`
* 监测进度
XMLHttpRequest.timeout
======================

**`XMLHttpRequest.timeout`** 是一个无符号长整型数，代表着一个请求在被自动终止前所消耗的毫秒数。默认值为 0，意味着没有超时。超时并不应该用在一个 document environment 中的同步 XMLHttpRequests 请求中，否则将会抛出一个 `InvalidAccessError` 类型的错误。当超时发生， timeout 事件将会被触发。

**备注：** 你不能在拥有的 window 中，给同步请求使用超时。

在异步请求中使用 timeout

在 IE 中，超时属性可能只能在调用 open() 方法之后且在调用 send() 方法之前设置。

示例
--


```js
var xhr = new XMLHttpRequest();
xhr.open("GET", "/server", true);

xhr.timeout = 2000; // 超时时间，单位是毫秒

xhr.onload = function () {
  // 请求完成。在此进行处理。
};

xhr.ontimeout = function (e) {
  // XMLHttpRequest 超时。在此做某事。
};

xhr.send(null);
```

规范
--

| Specification |
| --- |
| XMLHttpRequest Standard # the-timeout-attribute |
XMLHttpRequest.getResponseHeader()
==================================

\*\*XMLHttpRequest.getResponseHeader()\*\*方法返回包含指定响应头文本的字符串。

如果在返回的响应头中有多个一样的名称，那么返回的值就会是用逗号和空格将值分隔的字符串。`getResponseHeader()` 方法以 UTF 编码返回值。搜索的报文名是不区分大小写的。

语法
--
```

var myHeader = XMLHttpRequest.getResponseHeader(name);
```

### 参数

name

一个字符串，表示要返回的报文项名称。

### 返回值

报文项值，如果连接未完成，响应中不存在报文项，或者被 W3C 限制，则返回 null。

示例：
---


```js
var client = new XMLHttpRequest(); //新建 XMLHttpRequest 对象。
client.open("GET", "somefile.txt", true); // 采用异步，GET 方式获取 somefile.txt。
client.send(); // 发送空的 query string。
client.onreadystatechange = function() { //设定侦听器 onreadystatechange。
  if(this.readyState == this.HEADERS\_RECEIVED) { // 如果 readyState 表示响应头已返回
    var contentType=client.getResponseHeader("Content-Type")); // 将此连接的 Content-Type 响应头项赋值到 contentType。
    if(contentType != my_expected_type) { // 如果这不是你的预期值
      client.abort(); // 终止连接
    }
  }
}
```

规范
--

| Specification |
| --- |
| XMLHttpRequest Standard # dom-xmlhttprequest-getresponseheader |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

参见
--

* 如何使用 XMLHttpRequest
* HTTP 标头
* `getAllResponseHeaders()`
* `response`
* 设置请求标头：`setRequestHeader()`
XMLHttpRequest.open()
=====================

**XMLHttpRequest.open()** 方法初始化一个新创建的请求，或重新初始化一个请求。

**备注：** 为已激活的请求调用此方法（`open()`或`openRequest()` 已被调用）相当于调用`abort()`。

语法
--


```js
xhrReq.open(method, url);
xhrReq.open(method, url, async);
xhrReq.open(method, url, async, user);
xhrReq.open(method, url, async, user, password);
```

### 参数

`method`

要使用的 HTTP 方法，比如 `GET`、`POST`、`PUT`、`DELETE`、等。对于非 HTTP(S) URL 被忽略。

`url`

一个 `DOMString` 表示要向其发送请求的 URL。

`async` 可选

一个可选的布尔参数，表示是否异步执行操作，默认为 `true`。如果值为 `false`，`send()` 方法直到收到答复前不会返回。如果 `true`，已完成事务的通知可供事件监听器使用。如果 `multipart` 属性为 `true` 则这个必须为 `true`，否则将引发异常。

**备注：** 主线程上的同步请求很容易破坏用户体验，应该避免；实际上，许多浏览器已完全弃用主线程上的同步 XHR 支持。在 `Worker` 中允许同步请求

`user` 可选

可选的用户名用于认证用途；默认为 `null`。

`password` 可选

可选的密码用于认证用途，默认为 `null`。

规格
--

| Specification |
| --- |
| XMLHttpRequest Standard # the-open()-method |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

参见
--

使用 XMLHttpRequest
timeout
=======

当进度由于预定时间到期而终止时，会触发 `timeout` 事件。

|  |  |
| --- | --- |
| 冒泡 | 否 |
| 可取消 | 否 |
| 目标对象 | `XMLHttpRequest` |
| 接口 | `ProgressEvent` |

示例
--


```js
var client = new XMLHttpRequest();
client.open("GET", "http://www.example.org/example.txt");
client.ontimeout = function (e) {
  console.error("Timeout!!");
};
client.send();
```

继承
--

`timeout` 事件实现了 `ProgressEvent` 接口，它继承自 `Event` — 它拥有在这个接口上定义的属性和方法。

规范
--

| Specification |
| --- |
| XMLHttpRequest Standard # event-xhr-timeout |
| XMLHttpRequest Standard # handler-xhr-ontimeout |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

参见
--

* XMLHttpRequest
XMLHttpRequest: abort event
===========================

当一个请求终止时 `abort` 事件被触发，比如程序执行 `XMLHttpRequest.abort()`。

|  |  |
| --- | --- |
| Bubbles | No |
| Cancelable | No |
| Interface | `ProgressEvent` |
| Event handler property | `onabort` |

示例
--

### 在线示例

#### HTML


```html
<div class="controls">
  <input
 class="xhr success"
 type="button"
 name="xhr"
 value="Click to start XHR (success)" />
  <input
 class="xhr error"
 type="button"
 name="xhr"
 value="Click to start XHR (error)" />
  <input
 class="xhr abort"
 type="button"
 name="xhr"
 value="Click to start XHR (abort)" />
</div>

<textarea readonly class="event-log"></textarea>
```


```
.event-log {
  width: 25rem;
  height: 4rem;
  border: 1px solid black;
  margin: 0.5rem;
  padding: 0.2rem;
}

input {
  width: 11rem;
  margin: 0.5rem;
}
```


#### JS


```js
const xhrButtonSuccess = document.querySelector(".xhr.success");
const xhrButtonError = document.querySelector(".xhr.error");
const xhrButtonAbort = document.querySelector(".xhr.abort");
const log = document.querySelector(".event-log");

function handleEvent(e) {
  log.textContent =
    log.textContent + `${e.type}: ${e.loaded} bytes transferred\n`;
}

function addListeners(xhr) {
  xhr.addEventListener("loadstart", handleEvent);
  xhr.addEventListener("load", handleEvent);
  xhr.addEventListener("loadend", handleEvent);
  xhr.addEventListener("progress", handleEvent);
  xhr.addEventListener("error", handleEvent);
  xhr.addEventListener("abort", handleEvent);
}

function runXHR(url) {
  log.textContent = "";

  const xhr = new XMLHttpRequest();
  addListeners(xhr);
  xhr.open("GET", url);
  xhr.send();
  return xhr;
}

xhrButtonSuccess.addEventListener("click", () => {
  runXHR("dgszyjnxcaipwzy.jpg");
});

xhrButtonError.addEventListener("click", () => {
  runXHR("https://somewhere.org/i-dont-exist");
});

xhrButtonAbort.addEventListener("click", () => {
  runXHR("dgszyjnxcaipwzy.jpg").abort();
});
```


#### 结果

规范
--

| Specification |
| --- |
| XMLHttpRequest Standard # event-xhr-abort |
| XMLHttpRequest Standard # handler-xhr-onabort |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

参见
--

* 相关事件：`loadstart`、`load`、`progress`、`error`、`loadend`
* 监测进度
XMLHttpRequest.responseType
===========================

`XMLHttpRequest` 属性 **`responseType`** 是一个枚举字符串值，用于指定响应中包含的数据类型。

它还允许作者更改响应类型。如果将 `responseType` 的值设置为空字符串，则会使用 `text` 作为默认值。

语法
--


```js
var type = XMLHttpRequest.responseType;

XMLHttpRequest.responseType = type;
```

### 值

`Global_Objects/String` 类型的值，指定响应包含的数据类型。它可以采用以下值：

`""`

空的 `responseType` 字符串与默认类型 `"text"` 相同。

`"arraybuffer"`

`response` 是一个包含二进制数据的 JavaScript `ArrayBuffer`。

`"blob"`

`response` 是一个包含二进制数据的 `Blob` 对象。

`"document"`

`response` 是一个 HTML `Document` 或 XML `XMLDocument`，根据接收到的数据的 MIME 类型而定。请参阅 XMLHttpRequest 中的 HTML，了解有关使用 XHR 获取 HTML 内容的更多信息。

`"json"`

`response` 是通过将接收到的数据内容解析为 JSON 而创建的 JavaScript 对象。

`"text"`

`response` 是 `DOMString` 对象中的文本。

`"ms-stream"` 
非标准

`response` 是流式下载的一部分；此响应类型仅允许用于下载请求，并且仅受 Internet Explorer 支持。


**备注：** 将 `responseType` 设置为特定值时，作者应确保服务器实际发送的响应与该格式兼容。如果服务器返回的数据与设置的 `responseType` 不兼容，则 `response` 的值将为`null` .

### 异常

`InvalidAccessError`

试图更改 `XMLHttpRequest` 的 `responseType`，该值处于同步模式但不在 `Worker` 中。有关其他详细信息，请参阅下面的 同步 XHR 限制。

使用说明
----

### 同步 XHR 限制

你不能在同步`XMLHttpRequest` 中更改 `responseType` 的值，除非请求属于 `Worker`。此限制部分旨在帮助确保同步操作不会用于阻塞浏览器主线程的大型事务，从而阻碍用户体验。

XHR 请求默认是异步的；它们仅通过在调用 `open()` 时将 `false` 作为可选`async` 参数的值传递来置于同步模式。

### Worker 中的限制

在 `Worker` 中尝试将 `responseType` 的值设置为 `document` 时会被忽略。

规范
--

| Specification |
| --- |
| XMLHttpRequest Standard # the-responsetype-attribute |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

参见
--

* 使用 XMLHttpRequest
* XMLHttpRequest 中的 HTML
* 响应数据：`response`、
 `responseText` 和 `responseXML`
XMLHttpRequest.abort()
======================

如果该请求已被发出，**XMLHttpRequest.abort()** 方法将终止该请求。当一个请求被终止，它的 `readyState` 将被置为 `XMLHttpRequest.UNSENT` (0)，并且请求的 `status` 置为 0。

语法
--
```

xhrInstance.abort();
```

### 参数

无。

### 返回值

`undefined`

示例
--


```js
var xhr = new XMLHttpRequest(),
  method = "GET",
  url = "https://developer.mozilla.org/";
xhr.open(method, url, true);

xhr.send();

if (OH\_NOES\_WE\_NEED\_TO\_CANCEL\_RIGHT\_NOW\_OR\_ELSE) {
  xhr.abort();
}
```

规范
--

| Specification |
| --- |
| XMLHttpRequest Standard # the-abort()-method |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

参见
--

* 使用 XMLHttpRequest
XMLHttpRequest()
================

The **`XMLHttpRequest()`** 构造器初始化一个新的 `XMLHttpRequest` 对象。

关于 `XMLHttpRequest` 的具体用法，请参考使用 XMLHttpRequest。

语法
--


```js
new XMLHttpRequest()
```

### 参数

无。

### 返回值

一个新的 `XMLHttpRequest` 对象。此对象 must be prepared by at least calling `open()` to initialize it before calling `send()` to send the request to the server.

非标准 Firefox 语法
--------------

Firefox 16 added a non-standard parameter to the constructor that can enable anonymous mode (see Firefox bug 692677). Setting the `mozAnon` flag to `true` effectively resembles the `AnonXMLHttpRequest()` constructor described in older versions of the XMLHttpRequest specification.

Gecko/Firefox 16 为该构造方法新增了一个非标准的参数，以启用匿名模式（参见 Firefox bug 692677）。将 `mozAnon` 属性设置为 `true`，即可有效地模拟 `AnonXMLHttpRequest()` 构造器。此构造器在早先的 XMLHttpRequest 规范中有描述，但并未在任何浏览器中被实现。
```

const request = new XMLHttpRequest(paramsDictionary);
```

### 参数（非标准）

`objParameters`

有两个属性可以设置：

`mozAnon`

布尔值：将此属性设置为 `true` 将使浏览器在获取资源时不暴露自身来源和用户凭据。最重要的是，这意味着只有明确添加使用 setRequestHeader 才会发送 Cookies。

`mozSystem`

布尔值：将此属性设置为 `true` 允许建立跨站点的连接，而无需服务器选择使用 CORS\*（译者注：Cross-Origin Resource Sharing 跨域资源共享）\*。*必须同时将参数* `mozAnon` *设置为* `true`，*即不能与 Cookie 或其他用户凭据同时发送。仅限于在 privileged (reviewed) apps 起效（译者注：此句原文 This only works in privileged (reviewed) apps;）；在 Firefox 上任何网页加载后不起作用（译者注：此句原文 it does not work on arbitrary webpages loaded in Firefox.）。*


参见
--

* 使用 XMLHttpRequest
* XMLHttpRequest 中的 HTML
XMLHttpRequest.mozBackgroundRequest
===================================

**备注：** Web 内容无法使用此方法。它需要提升权限才能访问。

**`XMLHttpRequest.mozBackgroundRequest`** 是一个布尔对象，表示 `object` 是否为后台的服务请求。如果为 `true`，则不会将任何加载组与请求关联，并且不会向用户显示安全对话框。

请求失败时通常会显示安全对话框（例如身份验证或错误证书通知）。

**备注：** 该属性必须在调用 `open()` 之前设置。
XMLHttpRequest.getAllResponseHeaders()
======================================

**XMLHttpRequest.getAllResponseHeaders()** 方法返回所有的响应头，以 CRLF 分割的字符串，或者 `null` 如果没有收到任何响应。 **注意：** 对于复合请求（multipart requests），这个方法返回当前请求的头部，而不是最初的请求的头部。
```

DOMString getAllResponseHeaders();
```

语法
--
```

var headers = XMLHttpRequest.getAllResponseHeaders();
```

### 参数

无

### 返回值

一个原始的 Header 头例子：
```

date: Fri, 08 Dec 2017 21:04:30 GMT\r\n
content-encoding: gzip\r\n
x-content-type-options: nosniff\r\n
server: meinheld/0.6.1\r\n
x-frame-options: DENY\r\n
content-type: text/html; charset=utf-8\r\n
connection: keep-alive\r\n
strict-transport-security: max-age=63072000\r\n
vary: Cookie, Accept-Encoding\r\n
content-length: 6502\r\n
x-xss-protection: 1; mode=block\r\n
```


每一行通过\r\n 来进行分割。

例子
--
```

var request = new XMLHttpRequest();
request.open("GET", "foo.txt", true);
request.send();

request.onreadystatechange = function() {
  if(this.readyState == this.HEADERS_RECEIVED) {

    // Get the raw header string
    var headers = request.getAllResponseHeaders();

    // Convert the header string into an array
    // of individual headers
    var arr = headers.trim().split(/[\r\n]+/);

    // Create a map of header names to values
    var headerMap = {};
    arr.forEach(function (line) {
      var parts = line.split(': ');
      var header = parts.shift();
      var value = parts.join(': ');
      headerMap[header] = value;
    });
  }
```


上面的代码执行后，你可以：
```

var contentType = headerMap["content-type"];
```


上面的变量 `contentType` 可以获取到 HTTP header 里的 `content-type` 字段值。
XMLHttpRequest.statusText
=========================

只读属性 **`XMLHttpRequest.statusText`** 返回了`XMLHttpRequest` 请求中由服务器返回的一个`DOMString` 类型的文本信息，这则信息中也包含了响应的数字状态码。不同于使用一个数字来指示的状态码`XMLHTTPRequest.status`，这个属性包含了返回状态对应的文本信息，例如"OK"或是"Not Found"。如果请求的状态`readyState`的值为"UNSENT"或者"OPENED"，则这个属性的值将会是一个空字符串。如果服务器未明确指定一个状态文本信息，则`statusText`的值将会被自动赋值为"OK"。例子
--


```js
var xhr = new XMLHttpRequest();
console.log("0 UNSENT", xhr.statusText);

xhr.open("GET", "/server", true);
console.log("1 OPENED", xhr.statusText);

xhr.onprogress = function () {
  console.log("3 LOADING", xhr.statusText);
};

xhr.onload = function () {
  console.log("4 DONE", xhr.statusText);
};

xhr.send(null);

/\*\*
 \* 输出如下：
 \*
 \* 0 UNSENT
 \* 1 OPENED
 \* 3 LOADING OK
 \* 4 DONE OK
 \*/
```

规范
--

| Specification |
| --- |
| XMLHttpRequest Standard # the-statustext-attribute |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

参考内容
----

* List of HTTP response codes
* HTTP
XMLHttpRequest.mozAnon
======================

**`XMLHttpRequest.mozAnon`** 是布尔类型。如果这个变量为真，则这次请求将不携带 Cookies 或头部认证信息来发送。
XMLHttpRequest.readyState
=========================

**XMLHttpRequest.readyState** 属性返回一个 XMLHttpRequest 代理当前所处的状态。一个 XHR 代理总是处于下列状态中的一个：

| 值 | 状态 | 描述 |
| --- | --- | --- |
| `0` | `UNSENT` | 代理被创建，但尚未调用 open() 方法。 |
| `1` | `OPENED` | `open()` 方法已经被调用。 |
| `2` | `HEADERS_RECEIVED` | `send()` 方法已经被调用，并且头部和状态已经可获得。 |
| `3` | `LOADING` | 下载中；`responseText` 属性已经包含部分数据。 |
| `4` | `DONE` | 下载操作已完成。 |

UNSENT

XMLHttpRequest 代理已被创建，但尚未调用 open() 方法。

OPENED

open() 方法已经被触发。在这个状态中，可以通过 setRequestHeader() 方法来设置请求的头部，可以调用 send() 方法来发起请求。

HEADERS\_RECEIVED

send() 方法已经被调用，响应头也已经被接收。

LOADING

响应体部分正在被接收。如果 `responseType` 属性是“text”或空字符串，`responseText` 将会在载入的过程中拥有部分响应数据。

DONE

请求操作已经完成。这意味着数据传输已经彻底完成或失败。


**备注：** 在 IE 中，状态有着不同的名称，并不是 `UNSENT`，`OPENED` ，`HEADERS_RECEIVED` ，`LOADING` 和 `DONE`，而是 `READYSTATE_UNINITIALIZED` (0)，`READYSTATE_LOADING` (1) ，`READYSTATE_LOADED` (2) ，`READYSTATE_INTERACTIVE` (3) `和 READYSTATE_COMPLETE` (4) 。

示例
--


```js
var xhr = new XMLHttpRequest();
console.log("UNSENT", xhr.readyState); // readyState 为 0

xhr.open("GET", "/api", true);
console.log("OPENED", xhr.readyState); // readyState 为 1

xhr.onprogress = function () {
  console.log("LOADING", xhr.readyState); // readyState 为 3
};

xhr.onload = function () {
  console.log("DONE", xhr.readyState); // readyState 为 4
};

xhr.send(null);
```

规范
--

| Specification |
| --- |
| XMLHttpRequest Standard # states |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.