原生Ajax及跨域解决 | 青训营笔记

83 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的第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值可以链接外部,自动请求外部的服务器,就已经是跨域了

具体操作

  1. 用script标签链接某个url,然后服务器端口定义好接口,返回
  1. 注意,最好是动态的添加script标签
  1. 首先用let script = document.createElement('script')
  1. 然后添加地址,script.src=''
  1. 再然后添加到页面内html.body.append(script)