这是我参与「第四届青训营 」笔记创作活动的第1天
介绍
ajax其实就是一种方法,掌握ajax不仅需要知道编写方式,还需要了解浏览器知识
ajax的基础知识
- 创建对象
const xhr = new XMLHttpRequest()
- 发送请求,使用open和send
使用open函数指定请求的类型,请求的位置,请求时的同步,异步问题
使用send函数发送要发送给服务器的数据
xhr.open('Get', 'http://127.0.0.1:8000/server');
//将提交的信息发送过去
xhr.send('user:卢本伟$password:1262793484');
- 超时设置
设置超时的规定时间,比如说超时2s就设置为
xhr.timeout=2000
调用xhr的超时事件
`xhr.ontimeout=function()=>{
}`
- 历史ie缓存问题(虽然ie已经停止运行了,但是思维可以学习)
解决办法,ie缓存的原因本质是因为在发送一次ajax之久,因为请求头相同,于是这个浏览器就待机了
如果该get请求的url是第一次请求的话,会请求项目的后台,从数据库中获取数据,如果该get请求的url不是第一次请求的话
解决办法
ie缓存问题的解决就是使用时间戳,就是后面加个时间/ie?t='+Date.now()
- 停止请求,使用xhr.abort()
- 避免重复请求
原理,使用就是设置一个停止前面请求的判断语句,使用ajax的xhr,abort。跟节流有点相似吧,只能这么说
- 使用fetch()函数进行请求,较为方便
解决跨域问题
产生跨域的原因
问题:
浏览器为了保护传输的信息的安全,要求不能跨域,要同源
解决办法一
- 而且我们已经在开始学习时用到了,其实就是对客户端进行特别声明罢了,叫做CORS
response.setHeader('Access-Control-Allow-Origin', '*')
注意不止这一个声明方式
解决办法二
利用html自带的跨域标签,比如说script,img,这些标签都有一个显著的特点,就是拥有src属性值,src值可以链接外部,自动请求外部的服务器,就已经是跨域了
具体操作
- 用script标签链接某个url,然后服务器端口定义好接口,返回
- 注意,最好是动态的添加script标签
- 首先用let script = document.createElement('script')
- 然后添加地址,script.src=''
- 再然后添加到页面内html.body.append(script)