AJAX 是什么?
-
web 开发的一种技术
-
异步发送&请求数据
-
不需要重新刷新页面
AJAX 的作用?
- 提高用户体验,减少网络数据的传输量
AJAX 原理?
- 浏览器让 xhr(XMLHttpRequest) 去服务器要数据
- 浏览器这时继续干别的事情
- xhr 去向服务器请求数据
- 服务器返回数据给 xhr
- xhr 告诉浏览器数据已经请求到
- 浏览器接收到 xhr 返回的数据后渲染页面
使用 AJAX
- 创建 ajax 核心对象 xhr --- 注意考虑浏览器兼容性
- 向服务器发送请求
- GET --- 请求数据拼接在 URL 中
- POST
- 一定要设置请求头的格式内容
- 请求数据放在请求体(send)中
- 服务器响应处理
- 同步(false)
- 异步(true)
- readyState == 4
- status == 200
readyState?
- 0:未初始化 —— 尚未调用 .open()方法;
- 1:启动 —— 已经调用 .open() 方法
- 2:发送 —— 已经调用 .send() 方法
- 3:接受 —— 已经接收到部分响应数据
- 4:完成 —— 已经接收到全部响应数据并已可使用在客户端
status?
1XX
(临时响应)2XX
(成功)3XX
(重定向)4XX
(请求错误)5XX
(服务器错误)
常用状态码
200
表示从客户端发来的请求在服务端被正常处理了204
表示请求成功,但没有资源返回301
表示永久性重定向。该状态码表示请求的资源已被分配了新的 URI,以后应使用资源现在所指的 URI302
表示临时性重定向304
modified,服务器子资源未改变,可直接使用客户端未过期的缓存400
表示请求报文中存在语法错误。当错误发生时,需修改请求的内容后再次发送请求401
表示未授权,当前请求需要用户验证403
表示对请求资源的访问被服务器拒绝了404
表示服务器上无法找到请求的资源。除此之外,也可以在服务器端拒绝请求且不想说明理由时使用。500
表示服务器端在执行请求时发生了错误。503
表示服务器暂时处于超负荷或正在进行停机维护,现在无法处理请求。
GET 和 POST 请求数据的区别
GET
在浏览器回退时是无害的, 而POST
会再次提交请求GET
产生的 URL 地址可以被 Bookmark, 而POST
不可以GET
请求会被浏览器主动 cache, 而POST
不会, 除非手动设置GET
请求只能进行 url 编码, 而POST
支持多种编码方式GET
请求参数会被完整保留在浏览器历史记录里, 而POST
中的参数不会被保留GET
请求在 URL 中传送的参数是有长度限制的, 而POST
没有GET
只接受 ASCII 字符, 而POST
没有限制GET
比POST
更不安全, 因为GET
的参数直接暴露在 URL 上GET
参数通过 URL 传递,POST
放在 Request body 中
GET 和 POST 使用场景:
若符合以下任一情况, 则推荐使用 POST
方法:
- 请求的结果有持续性的副作用, 例如数据库内添加新的数据行
- 若使用
GET
方法, 则表单上收集的收据可能让 URL 过长 - 要传送的数据不是采用 7 位的ASCII 编码
若符合以下任一情况, 则推荐用 GET
方法:
- 请求时为了查找资源, HTML 表单数据仅用来帮助搜索
- 请求结果无持续性的副作用
- 收集的数据及 HTML 表单内的输入字段名称的总长不超过 1024 个字符