解决关于Apipost在ajax请求中设置token变量无效的问题

目录

总结与解决方法


今天给后端接口加上了token验证,使用apipost目录加上公共header和预执行脚本时结果与预期不一致。参考apipost官方文档

给所有要用token验证的目录加上公共header如下

 给所有要用token验证的目录加上预执行脚本如下

$.ajax({
    url: "http://localhost:8080/user/login",
    method: "GET",
    headers: {
        "content-type": "application/json"
    },
    timeout: "10000",
    data: JSON.stringify({
        "account": "my_account",
        "password": "my_password"
    }),
    success: function (response) {
        console.log(response.data.token);//打印查看此次登陆获取的token,稍后与变量参数的值比对
        apt.variables.set("token", response.data.token);//设置环境变量token为此次返回的token
    }
});

按预期结果来说,只要我配置好了这两处,那么使用apipost执行需要token验证的接口时,

将会通过预执行脚本先执行一次登陆操作,获取到此次登陆的token,将其存到环境变量中,那么在header处的token值会取这个环境变量token的值。

即预期在header中将会正常携带一个token给后端,并且这个token是每次执行都会更新的。

可是当配置完这两处执行时,token值依旧为{{token}},并且我们查看右方的小眼睛查看当前环境变量,也没有token,说明我们在ajax请求中并没有成功设置环境变量。

出现token值依旧为{{token}}的官方文档的描述如下,说变量token还未与接口返回的token绑定,所以原样输出了。

 可是我明明在ajax请求后将返回的token设置到变量中了呀?

而对于在ajax中设置环境变量无效的原因我在官方文档中并没有看到描述,并且官方文档中也有这样在ajax中设置环境变量。

于是我不改用预执行脚本的方式设置token变量了,而是在登陆接口的后执行脚本中将token设置到变量中去,如下。

apt.globals.set("token", response.json.data.token);

此时我们先执行一次登陆接口,拿到了此次登陆的token,再去执行一次需要token验证的接口,执行成功了,说明设置变量是没问题的,就是在ajax中设置环境变量没生效。

可是为什么我们在ajax请求中会设置环境变量无效呢?

隔了一晚再看遇到的这个问题,我突然想起来了

ajax是异步的。

再仔细看看官方文档,发现描述中有说明,执行ajax方法时,可能在执行过程中请求已经发送完毕了,也就是说我们在ajax中设置变量没有赶上他发送过去的速度。

于是apipost在7.0.4版本后可以通过 await 关键字转为同步方法,先执行完函数,再发送接口

总结与解决方法

ajax为异步请求,在函数执行我们到设置token环境变量的那行前,请求就已经发送走了,所以没有取到我们的token值

那么在ajax请求前加上await关键字,将ajax转为同步请求,保证发送请求前我们的环境变量设置完毕即可,如下。

await $.ajax({
    url: "http://localhost:8080/user/login",
    method: "GET",
    headers: {
        "content-type": "application/json"
    },
    timeout: "10000",
    data: JSON.stringify({
        "account": "my_account",
        "password": "my_password"
    }),
    success: function (response) {
        console.log(response.data.token);
        apt.variables.set("token", response.data.token);
    }
});

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值