首页 前端知识 数据请求的几种方式(ajax,fetch,jquery,axios)

数据请求的几种方式(ajax,fetch,jquery,axios)

2024-06-01 10:06:59 前端知识 前端哥 839 610 我要收藏

1.数据请求的四种方式:

        1.ajax请求:

        原生js提供的,其核心是XMLHttpRequest对象,多个请求之间如果存在先后关系,就会出现回调地狱问题。

        2.fetch数据请求

        和ajax一样,也是一种原生js提供的内置,使用promise形式,关注分离思想,但是兼容性不太好,所以使用的不是很多,在小小项目中可以使用

        3.jquery数据请求

        封装原生的ajax请求,使用回调形式

        4.axios请求

        封装原生的ajax请求,使用promise形式,可以在请求和响应阶段进行拦截(需要引入第三方库)

主要介绍原生ajax和axios请求

ajax请求:

        优点:页面无刷新,用户体验好,异步通信,更加快的响应能力等..

        请求方式:get post

        (1)get,post的区别

        1.get请求的时候将提交的数据拼接到url里面,任何人可见

        2.post请求将提交的数据放到请求头上,日他人不可见

        (2)提交数据大小限制不同

        get请求对数据的大小限制(适用于飞铭感数据和小数据)

        post请求对数据没有大小限制(适用于敏感数据和大数据)

ajax使用的五个步骤:
    1.创建一个XMLHttpRequest对象
        var xmlHttp=new XMLHttpRequest();
    2.设置请求方式和请求地址(使用open(methods,url,async)方法)
        methods:请求方式,get或者post,r如果没写默认是get
        url:请求路径,文件在服务器上的位置
        async:是否为异步请求,(默认是true,异步请求)
    3.发送send()请求   
        如果为post,需要使用setRequestHeader()来添加http头
    4.监听状态的变化
        每当readyState状态改变时候,就会触发onreadystatechange事件,执行回调函数
readyState存有XMLHttpRequest的5种状态,从0·4发生变化。
    0:请求未初始化
    1.服务器连接已建立
    2.请求已接收
    3.请求处理种
    4.请求已完成,且响应已就绪

    5.处理返回的结果:
    根据请求服务器返回状态码(status)
    大于200 小于300 或者等于304 则表示请求成功,否则服务器请求失败

    获取服务器中响应,使用XMLHttpRequest对象或者responseText或responseXML属性
        responseText:获取字符串形式的响应数据
        responseXML:获取XML形式的响应数据

        
 <button>发送请求</button>
 <script>
     window.onload=function () {
     var btn =document.querySelector("button");
     btn.onclick=function () {   
         //get请求
         //1.创建一个异步对象
         var xmlhttp=new XMLHttpRequest();
         //2.设置请求方式和请求地址
         xmlhttp.open("GET","07-Ajax-get.php"+"?userName=lnj&userPwd=123456",true);
         //3.发送请求
         xmlhttp.send();
         //4.监听状态的变化
         xmlhttp.onreadystatechange=function () {
                if (xmlhttp.readyState === 4) {
                   //5.处理返回的结果
                   if (xmlhttp.status>=200 && xmlhttp.status<300 ||xmlhttp.status===304){
                       console.log(xmlhttp.responseText); //输出服务器响应的内容
                    }else{
                        console.log("没有接收到服务器的数据");
                    }
                }
             }
         }
               
         //post请求    
         var xmlhttp=new XMLHttpRequest();
         xmlhttp.open("POST","10-Ajax-post.php",true);
         //post方式时需要使用setRequestHeader()来添加http头,将该内容放在设置请求与发送请求之间;
         xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
         //发送请求, 将要提交的数据放在send()中;
         xmlhttp.send("userName=liu&userPwd=654321");
         xmlhttp.onreadystatechange=function () {
            if (xmlhttp.readyState === 4) {  //请求完成时响应;
              if (xmlhttp.status>=200 && xmlhttp.status<300 ||xmlhttp.status===304 ){
                        console.log(xmlhttp.responseText);
                    }else{
                        console.log("没有接收到服务器的数据");
                    }
                }
            }
         }
      }
    </script>

axios是一个轻量级的库,支持promise,可以拦截请求和响应等....

安装:npm install axios

引入:import axios from "axios

1.axios的基本使用:

//get
axios.get('http://123.207.32.32:8000/home/data?type=sell&page=3')
  .then((response)=> { console.log(response)})
  .catch((error)=> {console.log(error)})
  
可以通过向 axios 传递相关配置的方式来创建请求,如下:
axios({
    methods:"get"      //请求方式不写就默认为get请求     
    url:"http://123.207.32.32:8000/home/data?type=sell&page=3",
 }).then(res=>{  //数据请求成功,res为成功数据
    console.log(res);
 }).catch((err)=>{
    console.log(error);
 )
//可以将url拆分开,将后面的参数单独放在params中
axios({
   methods:"get" 
   url:"http://123.207.32.32:8000/home/data",
   params:{
     type:"sell",
     page:3
   }
 }).then(res=>{  //请求成功   
   console.log(res);
 })

//post
axios({
  method: 'post',
    url: '/user/12345',
   data: {   //post传递参数
    firstName: 'Fred',
    lastName: 'Flintstone'
  }
}).then(function (response) {
     console.log(response);
  }).catch(function (error) {
     console.log(error);
  });
  

  在项目中最常用的就是全局配置axios:

//全局配置内容
axios.defaults.baseURL="http://123.207.32.32:8000"
axios.defaults.timeout=5000
 axios.all([
      axios({
         url:"/home/multidata",
       }),
      axios({
         url:"/home/data",
       })
    ]).then(results => {console.log(results) })

      全局配置完axios请求之后,还可以配置拦截器,主要是为了对信息的进一步加工,减少请求的次数:

/2.axios的请求拦截器, 拦截的是instance请求中的config内容。
  instance.interceptors.request.use(config =>{    
    //这里的config包含每次请求的内容,如请求头、url、传参data等等。
    console.log(config);
    //请求拦截后会做什么事情???
    //1.比如:config中的一些信息,不符合服务器的要求, 对信息修改会转化
    //2.比如:某些网络请求(登录..),必须携带一些特殊的信息,则将它拦截,然后判断一下,如果没带特殊信息,则给它提示
    return config   
    //请求拦截,操作后返回config,不然请求拦截了服务器不会响应,拿不到结果。
  },err => {
    console.log(err);
  })
  
//3.axios的响应拦截器, 拦截的是服务器返回的结果res
  instance.interceptors.response.use(res=>{
    //这里的res包含服务器响应的data、响应头、状态码,配置等等。
    console.log(res);
    //拦截后,进行相关操作...
    return res.data              
    //若需要数据,则可以只返回拦截内容中的data就可以了
  },err=>{
    console.log(err);
  })

拦截器最常见的操作是搭配路由进行操作:

 // http response 拦截器
axios.interceptors.response.use(
  response => {
    if (response.data.errno === 999) {  //过期服务器返回错误码
      router.replace('/');
      console.log("token过期");
    }
    return response;
  },
  error => {
    return Promise.reject(error);
  }
);

这里验证如果token过期,就直接配合路由跳转到登录页面

扩展:
HTTP请求报文由3部分组成 =>(请求行+请求头+请求体)
请求头 存放通知服务器有关于客户端请求的信息,一般用来存放一些cookie,token等信息(属性:属性值)
常见的请求头有:
cookie : 浏览器端cookie
Accept :告诉服务端 客户端接受什么类型的响应。
Authorization HTTP授权的授权证书 ——》用来设置token

        headers:

         {

                authorization: `Bearer ${token}`,

                //将token放到请求头中,Authorization属性存放验证

         },
Referer:表示这个请求是从哪个URL过来的
application/json : JSON数据格式
Connect-Type : 显示此HTTP请求提交的内容类型。一般只有post提交时才需要设置该属性。等等。
响应头 Response Header
常见的响应头有:
Accept-Ranges:表明服务器是否支持指定范围请求及哪种类型的分段请求
Expires:响应过期的日期和时间
常见的响应码有:
1. 200 OK
2. 303 See Other ,把redirect到其它的页面
3. 404 Not Found ,责任在客户端 ,即找不到页面
4 .5xx 处理发生错误,责任在服务端,如服务端抛出异常,路由出错等

转载请注明出处或者链接地址:https://www.qianduange.cn//article/10394.html
标签
评论
发布的文章

npmjs官网(查询依赖包)

2024-06-07 00:06:56

npx使用及原理

2024-06-07 00:06:36

npm 包管理工具

2024-06-07 00:06:33

vue 思极地图开发

2024-06-07 00:06:28

大家推荐的文章
会员中心 联系我 留言建议 回顶部
复制成功!