AJAX的学习
1、背景
- async 异步 ( async javascript and xml )
- 前后端交互的手段
2、ajax的 特点
- 不需要任何其他东西就可以直接操作
- 纯面向对象的语法
- JS内部给我们提供了一个内置构造函数我们可以直接使用
- 请求可以让页面无刷新更新数据
- 响应内容不会直接显示到页面
3、使用 AJAX
- 创建一个 ajax 对象
const xhr = new XMLHttpRequest()
const xhr - new ActiveXObject("Microsoft.XMLHTTP") //IE9及以下
- 请求方式和请求地址
get 请求传参是拼接到地址后面 ?key=value&key=value
xhr.open("GET","/index.php?key=value&key=value)
//第三个参数:就是指定是否异步 默认值是 true
//POST请求需要有请求头
xhr.setRequestHeader("content-type","application/x-www-form-urlencode")
xhr.send("key=value&key=value")
- 发送请求
xhr.send()
setTimeout(()=>{
console.log(xhr.readyState)
,2000)
xhr.onreadystatechange = function(){
}
注意:xhr 里面有两个东西 状态码: status
readyState
- readyState === 0 请求建立了,创建了 ajax 对象以后
- readyState === 1 请求准备完毕,知道了请求方式和请求地址 open() 以后
- readyState === 2 接收服务端的响应
- readyState === 3 开始解析数据了
- readyState === 4 数据解析完成 可以使用了
xhr 里面有两个方法 onreadystatechange
onload
xhr.onreadystatechange = function(){
if(xhr.readyState === 4 && /^2\d{2}$/.test(xhr.status)){
console.log(xhr.responseText)
}
}
//新增的xhr方法
//普通浏览器可用,老版浏览器别用 开发时也别用
xhr.onload = function(){
console.log(xhr.responseText)
}
同源策略
浏览器做的一个限制 只能访问同源(域名 请求协议 端口一模一样)请求
- 请求协议、域名、端口有一个不一样都不允许你访问
客户端向服务端发送请求
我们把这个安全策略叫做 跨域
浏览器不允许你去访问别人的服务器
解决跨域的方法
-
1、
jsonp
jsonp的原理 :主要是利用script 标签的src 属性没有跨域的限制
-
2、
nginx
反向代理服务器访问服务器不受同源策略影响
-
3、cors跨域
给php文件里面加入
header("Access-Control-Allow-Origin:*");
不受跨域影响的标签
- link 标签 请求过来的字符串直接当成 css 解析
- a
- img 请求过来的字符串直接当成 图片 解析
- script 请求过来的字符串直接当成 js 解析
- iframe 请求过来的字符串直接当成 html 解析
异步
代码执行 先执行同步代码,遇到异步代码,先把它扔到队列里面去,等同步代码执行完毕,再去队列里面看看还有没有代码没有执行,如果有再按照顺序执行
promise
-
解决回调地狱
-
ES6 新增 把异步代码当成同步来书写 并不可以优化代码量
-
promise 有三个状态 pendding 等待中
resolve 解决 成功
reject 拒绝 失败