ajax
ajax
前后端交互的一种手段
通过 JS 向服务端发起请求
所有服务端返回的响应都不会直接显示再页面上
而是返回给 js 这个语言
依赖于浏览器来发送请求
ajax
a: async
j: javascript
a: and
x: xml
这里要简单说一下 session
存在于 服务器 端的存储空间
当他打开的那一瞬间, 就会生成一个 "密码"
这个密码会自动存储到 cookie 里面
等到返回前端的时候, 会自动把"密码"带回去
只要向 session 空间里面存储内容或者获取内容
必须要先开启, 后使用
开启 session 空间
session_start();
存储一些数据
PHP 有一个内置的 关联型数组就叫做 $_SESSION
使用方式
1. 找到一个对象能帮我发送 ajax 请求
XMLHttpRequest() 内置构造函数
专门创建实例化对象帮你发送 ajax 请求
const xhr = new XMLHttpRequest();
2. 对本次请求进行一些配置
open() 的方法
使用方法: xhr.open(请求方式, 请求地址, 是否异步)
请求方式: GET POST PUT ...(大小写无所谓)
请求地址: 你要请求哪一个后端位置
是否异步: 选填, 默认是 true, 可以选填 false, 表示同步
3. 把请求发出去
send() 方法
使用方法: xhr.send()
4. 接收响应
onload 事件
使用方法: xhr.onload = function () {}
本次请求结束以后触发(响应成功了以后触发)
xhr 里面有个属性叫做 responseText 就是响应体
下面是 get.php 的代码部分
ajax 的异步问题
1. open 的第三个参数可以配置
默认 true 表示异步
false 表示 同步
分析四个步骤
1. 创建 ajax 对象, 同步代码
2. 配置请求信息, 同步代码
3. 发送请求, 异步代码, 当代码执行到这句话的时候, 先把请求发出去
等到响应的过程是异步
4. 事件, 会在满足条件的时候触发
条件: 响应回来
异步执行的时候:
console.log('start')
1. 创建 ajax 对象
2. 配置请求信息
3-1. 把请求发出去
4. 绑定事件, 请求完成的事件
console.log('end')
3-2. 响应回到客户端, 触发事件
console.log(响应体)
同步执行的时候:
console.log('start')
1. 创建 ajax 对象
2. 配置请求信息
3-1. 把请求发出去(同步), 等到响应回来再继续执行代码
3-2. 响应回到客户端, 不会触发事件, 因为事件还没有绑定
4. 绑定事件, 事件再也不会触发了
console.log('end')
如果想接收到响应, 需要再 send 之前绑定事件
结论:
同步的时候, 事件必须写在 send 之前
异步的时候, 事件写在前面后面无所谓
书写 ajax 的时候, 都要按照 1 2 4 3 的步骤写
ajax 的兼容
ajax 不动向下兼容
ajax 的兼容有两个部分
1. 创建 ajax 对象
2. 接收响应
创建 ajax 对象的兼容
1. new XMLHttpRequest() 标准浏览器使用
2. new ActiveXObject('Msxml.XMLHTTP') IE 7 8 9
3. new ActiveXObject('Msxml2.XMLHTTP') IE 6
4. new ActiveXObject('Microsoft.XMLHTTP') IE 5.5+
5. 再向下的 IE 不支持 ajax
IE 11 浏览器, 跑不起来
ajax 是基于内核的兼容
接收响应的兼容
IE 低版本里面没有 onload 事件
IE 低版本只能使用 onreadystatechange 事件来接收响应
事件里面进行判断
xhr.status 再 200 ~ 299 之间
xhr.readyState === 4 的时候
正常使用响应体
ajax 状态码
状态码
响应状态码: 描述本次请求的状态
ajax 状态码: 描述 ajax 进行到哪一个步骤了
使用方法: xhr.readyState();
0: 创建 ajax 对象成功
1: 配置请求信息完成
2: 请求发送出去了, 响应报文回到了浏览器
3: 浏览器正在解析响应报文
4: 浏览器解析响应报文成功, 已经可以正常使用 xhr.responseText
响应状态码
在 xhr 里面还有一个信息表示 响应状态码
xhr.status
描述本次请求的状态
版权声明: 本文为 InfoQ 作者【Jason199】的原创文章。
原文链接:【http://xie.infoq.cn/article/e077134d6afaeb67a61d1082c】。
本文遵守【CC BY-NC】协议,转载请保留原文出处及本版权声明。
评论