原生JS ajax

是一个原生js的一个网络请求,通过创建XMLHttpRequest的实例来发送请求
### 发送请求的步骤
1.创建一个XMLHttpRequest的实例对象
var request = new XMLHttpRequest();
2.配置请求方式,设置请求接口地址
配置参数
如果有参数,那么需要设置参数
open 打开连接
request.open(method,url,boolean)
参数 :
	method :取值 get/post
	url: 取值为请求的地址, 注意跨域请求会报错
	boolean : true默认值,代表异步请求,false:代表同步请求,用同步请求会阻塞,像alter一样(一般不建议更改,默认为true)
3.设置请求头 requestHeader()
在请求中有参数的话需要设置,请求都可以设置多个
setRequestHeader
格式:request.setRequestHeader(‘Content-type’, '数据格式');
	数据格式参数的选项有如下
常用的数据格式(编码可带可不带)
发送json格式数据
request.setRequestHeader('Content-type', 'application/json; charset=utf-8');
发送表单数据
request.setRequestHeader('Content-type', 'application/x-www-form-urlencoded; charset=utf-8');
发送纯文本(不指定Content-type时,此是默认值)
request.setRequestHeader('Content-type', 'text/plain; charset=utf-8');
发送html文本
request.setRequestHeader('Content-type', 'text/html; charset=utf-8');
4.发送请求
request.send();//调用send()之后,请求就会发送到服务器
请求发送后,会在控制台获得响应的数据,但在前端看不见,如果是post请求,那么参数写在括号里,注意转换数据格式,数据格式跟以上设置的请求头格式应该要一样。
获取响应的注册事件

发送请求后,会收到响应,收到响应后,XHR对象的以下属性会被填充上数据。

  • responseText:作为响应体返回的文本。
  • responseXML:如果响应的内容类型是"text/xml"或"application/xml",那就是包含响应数据的 XML DOM 文档。
  • status:响应的 HTTP 状态。一般200 为成功
  • statusText:响应的 HTTP 状态描述。
  • readyState:返回HTTP请求状态
    0 open()尚未调用 UNSENT
    1 open()已调用 OPENED
    2 接收到头信息 HEADERS_RECEIVED
    3 接收到响应主体 LOADING
    4 响应完成 DONE
  • readystatechange 请求状态改变事件
    当readyState值改变为4或服务器的响应完成时,所有的浏览器都触发该事件
5.获取响应返回的数据
request.onreadystatechange = function () {
      if (request.readyState === 4 && request.status === 200) {
        // console.log(request.responseText);
        // 转换为JSON对象
        console.log(JSON.parse(request.responseText));
      }
    }

get有参请求 三种方式

1.url拼接字符串
2.参数序列化
2.1创建参数对象
var params = {参数:值,参数:值 }
2.2参数序列化
2.21 导入qs ----一个序列化工具
			 <script src="./qs.js"></script>
	2.22 序列化 Qs.stringify(params)
	2.23 拼接到url地址 'url?'+ Qs.stringify(params)

post 有参请求

基本操作与get有参请求一样,但参数不拼接到地址栏里,但是在send前根据接口需求需要设置请求头,即:
 request.setRequestHeader('Content-type','application/json;charset=utf-8');
request.send(JSON.stringify(params))

原版案例

下面是一个完整的post有参请求案例

function saveOrUpdate () {
        // 1.创建一个实例对象
        var xhr = new XMLHttpRequest();
        // 设置参数
        var obj = {
          name: '123'
        };

        // 打开连接
        xhr.open('post', '请求的地址')
        // 设置请求头
        xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencode')
        //一个登录的验证的请求头,没有额可以忽略,sessionStorage.getItem为在session里面获得该值
        xhr.setRequestHeader('Authorization', sessionStorage.getItem('token'))

        // 发送请求
        xhr.send(Qs.stringify(obj))
        // 接受响应
        xhr.onreadystatechange = function () {
          if (xhr.readyState === 4 && xhr.status == 200) {
            console.log(xhr.responseText);//拿到是的是一个json格式

          }
        }
      }

jquery ajax

在jquery中,做了一个原生ajax的封装$.ajax({})的格式
请求步骤与原生的相似,只是书写上有不同
下面附一个jquery的post请求

// 登录:点击登录获取token并存储起来,并配置到Ajax的全局对象中
      $(".login").click(function () {
        // 设置参数
        var obj = {
          username: 'admin1',
          password: '123321'
        }
        $.ajax({
          // 请求路径
          url:  '/user/login',
          // 请求方式
          method: 'post',
          // 请求头
          headers: {
            'Content-Type': 'application/json'
          },
          // 要携带的参数
          data: JSON.stringify(obj),
          success (res) {
            // 请求成功的操作 res 为请求回来的数据
            console.log(res);
            // 存储token
            sessionStorage.setItem('token', res.data.token)
            // 全局配置每个都需要请求携带的token
            $.ajaxSetup({
              headers: {
                'Authorization': sessionStorage.getItem('token')
              }
            })
          },
          error (err) {
            // 请求失败的操作放这里,err为请求的错误代码
          }
        })
      })