首页 > 其他分享 >Ajax 和 axios 调用接口的使用

Ajax 和 axios 调用接口的使用

时间:2023-09-12 10:35:36浏览次数:48  
标签:function axios 请求 token 接口 表单 Ajax error


 一、 前提了解:

服务器:负责存放和对外提供资源的电脑‘请求-处理-响应’
客户端:在上网过程中,负责获取和消费资源的电脑
URL:统一资源定位符,协议域名端口号
资源的请求方式:
  1. get:获取服务器资源
  2. post:向服务器提交数据
  3. 其他:put修改、delete删除、fetch批量

二、 Ajax的使用

前端异步请求后端,XMLHttpRequest对象用于和服务器交换数据

实现网页与服务器之间的数据交互;局部刷新
场景:用户名检测 / 搜索提示 / 数据分页显示(跳转不刷新页面) / 数据的增删改查  

  2.1 jQuery中发起 Ajax 请求:

$.get / post(url,[data],[callback])
$.ajax (type,url,[data],[callback])  type默认get

 $.get() :用于获取数据
 $.post():用于提交数据
 $.ajax():既可以获取数据,又可以提交数据;
           可以返回success、error、complete结果

  2.2 Postman测试工具:

测试GET:1. 选择请求方式,2. 填写URL地址,3. 填写参数,4. 点击Send发送,5. 查看响应结果

测试POST:1. 选择请求方式,2. 填写URL地址,3. 选择body面板勾选数据格式x-www,4. 填写发送数据,4. 点击Send发送,5. 查看响应结果

  2.3 Ajax提交Form表单数据:

action属性:数据提交 URL 地址
target:-bank新窗口打开,self默认当前窗口打开
method:数据提交方式,get默认 / post
enctype:发送表单数据之前如何对数据进行编码
application/x-www-form-urlencoded默认;   mulitipart/form-data上传文件

表单同步提交:表单提交后,页面发生跳转,页面之前的状态和数据会丢失
解决:表单采集数据,Ajax提交到服务器

监听表单提交事件:

$('#f1').submit(function () {})
$('#f1').on('submit', function () {})

阻止表单默认提交行为:

$('#f1').submit(function (e) {
  e.preventDefault()
})

$('#f1').on('submit', function (e) {  
   e.preventDefault()
})

快速获取表单数据:

$('#form').serialize()
$('#form').serializeArray()
调用表单form的id名,获取表单值,表单值要设置name值

三、 axios的使用

中文文档:axios中文文档链接,点击跳转

基于原生ajax+Promise技术封装通用于前后端的请求库。专注于网络数据请求的库,比XMLHttpRequest简单,比jQuery更加轻量化

安装命令:yarn add axios
导入命令:import axios from "axios";

axios 发起 get 请求:
axios.get('url', { params: { /*get参数*/ } }).then(callback).catch(function(error){ })

axios 发起 post 请求:
axios.post('url', { /*post 参数*/ }).then(callback)

axios的二次封装(常用):

// 封装 axios 请求模块
import axios from "axios";
import router from "@/router";
 
// axios.create 方法创建一个axios的实例
const request = axios.create({
  baseURL: "/localhost", // 接口的基准路径,改成自己的项目基地址
});
 
// 请求拦截器:是否注入token
request.interceptors.request.use(
  function (config) {
    return config;
  },
  function (error) {
    return Promise.reject(error);
  }
);
// store文件中vuex和localstorage对token进行处理之后响应拦截器中统一处理 token 过期
// 处理流程:在axios拦截器中加入token刷新逻辑;用户token过期时,向服务器请求新的 token;旧token替换为新token;然后继续用户当前的请求
// 响应拦截器
request.interceptors.response.use(
  function (response) {
    return response;
  },
  async function (error) {
    console.dir(error);
    if (error.response && error.response.status === 401) {
      // 校验是否有 refresh_token
      const user = store.state.user;
      if (!user || !user.refresh_token) {
        router.push("/login");
        return;
      }
      // 如果有refresh_token,则请求获取新的 token
      try {
        const res = await axios({
          method: "PUT",
          url: "/admin/waterMeter/login", // 改成自己的项目的登录地址
          headers: {
            Authorization: `Bearer ${user.refresh_token}`,
          },
        });
 
        // 如果获取成功,则把新的 token 更新到容器中
        console.log("刷新 token  成功", res);
        store.commit("setUser", {
          token: res.data.data.token, // 最新获取的可用 token
          refresh_token: user.refresh_token, // 还是原来的 refresh_token
        });
        return request(error.config);
      } catch (err) {
        // 如果获取失败,直接跳转 登录页
        console.log("请求刷线 token 失败", err);
        router.push("/login");
      }
    }
 
    return Promise.reject(error);
  }
);
 
export default request;

封装之后发起请求:

// export const login = (user) => {
//   return request({
//     url: '', // 接口地址
//     method: 'POST', 'GET', // 请求方式
//     // 如果参数通过请求体来发(post),用data是请求体参数
//     // 如果参数通过请求行来发(get),用params是路径参数
//     data: user
//   })
// }

四、 请求跨域

1. proxy代理:

本地向proxy代理服务器发送请求,proxy接收本地请求,转换为目标地址相同IP和端口向目标地址发送请求。

前端使用proxy代理解决跨域的问题

2. JSONP:

兼容性好,只支持 GET 请求,不支持 POST 请求

实现原理:<script> 标签不受同源策略影响;通过 <script> 标签的 src 属性,请求跨域的数据接口,并通过函数调用的形式,接收跨域接口响应回来的数据

过程:定义一个js文件,通过script标签src引入,通过callback参数指定调用函数名;
JSONP利用script标签的src属性,跨域特性,和Ajax没有任何关系; 
非同源接口要返回一个函数的调用形式,将来这个函数会在客户端当成js代码来执行

使用jQuery中封装的JSONP实现:动态创建再移除<script>标签 --
$.ajax({
  url: '   ',
  dataType: 'jsonp',      // 代表我们要发起JSONP的数据请求
  jsonp: 'callback',      // 这个属性一般都不改的
  jsonpCallback: 'abc',   // 指定回调函数名,会调用同名函数
  success: function (res) { }
})


3. CORS:

优势:在服务端进行控制是否允许跨域,可自定义规则、支持各种请求方式;
缺点:不兼容某些低版本的浏览器、会产生额外的请求;

4. nginx反向代理:

思路是:利用nginx反向代理把跨域为不跨域,支持各种请求方式

缺点:需要在nginx进行额外配置,语义不清晰


标签:function,axios,请求,token,接口,表单,Ajax,error
From: https://blog.51cto.com/u_15961699/7443193

相关文章

  • 说完 Java 的 Abstract 后再来说说接口 (interface )
    如你对Abstract修饰的抽象类不是非常了解的话,请自行先考古下。这篇文章需要对Java定义过的抽象类有一些基本的了解才可以。抽象类和抽象方法用Abstract修饰的类,叫做抽象类,那么用Abstract修饰的方法叫做抽象方法。在Java中,喜欢用一些修饰关键字来对类或者变量或者方法来进......
  • 说完 Java 的 Abstract 后再来说说接口 (interface )
    如你对Abstract修饰的抽象类不是非常了解的话,请自行先考古下。这篇文章需要对Java定义过的抽象类有一些基本的了解才可以。抽象类和抽象方法用Abstract修饰的类,叫做抽象类,那么用Abstract修饰的方法叫做抽象方法。在Java中,喜欢用一些修饰关键字来对类或者变量或者方......
  • 苏宁API接口解析,实现按关键字搜索suning商品
    苏宁API接口提供了多种搜索商品的方式,其中包括按关键字搜索。下面是一个简单的示例,演示如何使用苏宁API接口实现按关键字搜索商品:importrequestsimportjson#苏宁API接口地址api_url="https://api.suning.com/item/search"#请求参数params={"ke......
  • 以程序员视角讲述关于api数据接口的应用
    作为一名程序员,API数据接口是我们日常工作中不可或缺的一部分。API,即ApplicationProgrammingInterface,应用程序编程接口,是一种用于访问特定软件包或服务的预定义函数和过程。通过API,我们可以从各种数据源获取数据,并将其用于构建应用程序、网站或其他数字工具。下面,我将以一个程序......
  • 使用Python开发一个ICP备案查询接口
    使用Python开发一个ICP备案查询接口实现目标支持通过域名、APP名称、快应用名称、小程序名称来查询对应的备案信息支持通过公司主体名称来查询所有备案信息,并支持分页查询支持通过备案号来查询备案信息构建一个高性能的模块基于模块构建一个高性能的本地化Api,并提供更人性......
  • 通过snmp获取设备每个接口的配置IP地址,网段信息和VLAN接口号
    第一部分,观察通过snmpOID能获取的信息,对信息进行关联。1、通过snmp获取到接口IP地址和掩码信息,发现IP地址作为索引值;2、每个IP地址的索引,都可以关联到接口的索引3、每个接口索引,都可以通过snmp获取到接口的名称,降这个3个数据进行关联,可以得到接口名称和网段信息的关联。第......
  • HTTP接口测试
    @Author:BasilGuo@Date:Feb.20,2021@Description:HTTP接口测试@Keyword:test,httpinterface@Type:tutorial学习方式:先方法,后工具(接口测试常用工具有SoupUI、JMeter)学习建议:了解接口是做什么的。理解接口的业务处理逻辑。熟悉接口核心的三组件:地址、入参、返......
  • rdma-mr内核接口rxe_reg_user_mr
    描述:注册用户内存区域【通过IB_USER_VERBS_CMD_REG_MR】根据type流程:a)    类型转换为rxe类型b)   验证mr_typec)    申请rxe_mem:mr=rxe_alloc(&rxe->mr_pool);d)   为mr分配索引:rxe_add_index(mr)e)    对对象进行引用:rxe_add_ref(pd)f)     构成......
  • 调用视频直播点播平台EasyDSS流媒体服务器上传点播文件接口的具体操作步骤
    EasyDSS互联网视频云平台可提供一站式的视频转码、点播、直播、推拉流、时移回放等服务,也能支持4K视频的直播、点播等功能。EasyDSS可用于视频点播,并支持OBS、推流相机、EasyRTMP等设备的推流直播,可应用在AR、VR、无人机推流、虚拟直播、教育培训、远程会议等场景中。 有用户向......
  • 字节序转换接口
    第一组#include<arpa/inet.h> //函数作用:将无符号整数hostlong从主机字节顺序转换为网络字节顺序。 uint32_thtonl(uint32_thostlong); //函数作用:将无符号短整数hostshort从主机字节顺序转换为网络字节顺序。 uint16_thtons(uint16_thostshort); //函数作用::将无符......