AJAX 使用
let xhr = new XMLHttpRequest()
xhr.open("POST", url)
xhr.setRequestHeader("Content-Type", "application/json")
xhr.onreadystatechange = function() {
if (xhr.status / 100 | 0 === 2 && xhr.readyState === 4) {
}
}
xhr.send(requestBody)
AJAX 基础知识
1. 关于 xhr.onreadystatechange
对于一个 XMLHttpRequest 的实例对象 xhr, 其 readyState 有 5 个值
| readyState 值 | 意义 |
|---|
| 0 | UNSENT : 表示还没有调用 open 方法 |
| 1 | OPENDED : 表示已经调用了 open 方法 |
| 2 | HEADERS_RECEIVED : 表示已经收到 responseHeader |
| 3 | LOADING : 表示正在下载 responseBody |
| 4 | DONE : 表示服务器发送的响应数据已经全部获取完成 |
2. 关于获取响应头和响应体
xhr.getResponseHeader(key)
xhr.getAllResponseHeaders()
xhr.responseText
xhr.response
3. 关于 xhr.status (即 HTTP 状态码)
-
2xx-成功: 请求已经成功被服务器接收, 理解, 并接受
-
3xx-重定向: 这些状态码用来重定向, 后续的请求地址(重定向目标)在本次响应的 Location 域中指明
| 状态码 | 意义 |
|---|
| 301 | 永久重定向 |
| 302 | 临时重定向 |
| 304 | 表示在客户端中缓存的数据与服务端中的一致 |
| 305 | 被请求的资源必须通过指定的代理才能被访问 |
-
4xx-客户端错误
| 状态码 | 意义 |
|---|
| 403 | 服务器理解请求, 但是拒绝执行 |
| 404 | 请求的资源未在服务器上 |
| 405 | 请求方式(method)不被允许 |
| 408 | 请求超时 |
-
5xx-服务器错误
| 状态码 | 意义 |
|---|
| 500 | 由于某种错误, 服务器无法完成对请求的处理 |
| 502 | 作为网关或代理工作的服务器尝试执行请求时, 从上游服务器收到无效的响应 |
| 503 | 服务器过载 |
3. 关于请求头中 Content-Type 的值的设置
| 值 | 对应的请求体数据格式 |
|---|
| text/plain | 普通字符串 |
| text/html | HTML 字符串 |
| application/json | JSON 字符串 |
| x-www-form-urlencoded | 类似于通过 GET 方式发送的请求(name=x&age=y) |
| multipart/form-data | 文件上传 |