vue3中实现jsonp请求的几种方式
今天在调取一个第三方api时,使用axios发请求,浏览器爆cros跨域操作,仔细看文档,才发现需要用到jsonp请求。
众所周知,axios默认是不能发起jsonp请求的,于是,第一时间想到了jquery,但是考虑到jquery的包体积较大,还是想着尽可能选择一个较为优化的方案。这里对比的方案有:vue-jsonp、jquery、jsonp以及 axios-jsonp四款插件。
一、jquery
首先,使用jquery对接口进行测试,毕竟在vue之前,我们几乎都使用过jquery。
使用jquery顺利获取到数据,代码如下:
import $ from 'jquery'
$.ajax({
url:'https://api.domain.com/v1/',
type: 'GET',
dataType: 'jsonp',
data:{
......
},
success:(res)=>{
console.log(res)
}
})
但是不得不说,如果我们仅仅为了一个jsonp就引入整个jquery,多多少少还是有些大材小用,jquery中八九成的内容可都是关于dom操作的。
二、vue-jsonp
上次维护:3年前 体积:11.4KB
很多人反馈vue-jsonp在vue3中不能使用,经过测试,其实不要按其文档去全局引入,只在需要用到的页面,引入jsonp即可。
也可以达到预期目的。
import {jsonp} from "vue-jsonp";
jsonp('https://api.domain.com/v1/',{
......
}).then(res=>{
console.log(res)
}).catch(err=>{
console.log(err)
})
这款插件,好是好,但是上次维护还是在三年以前,因此还是再继续寻找一番,如果再无合适的包,也就用这款了。
三、jsonp
上次维护:7年前
在npmjs库宗搜索,我们发现了有直接的jsonp库,使用 npm i jsonp 下载安装,
这款库,坑比较多,首先,他的参数键名为param(单数),其次,他的param要求是字符串,因此,我们将参数转换为String类型,但是浏览器虽然不报cros错误了,又开始报crob错误。
const param = {
......
};
const queryString = Object.keys(param).map(key => key + '=' + param[key]).join('&');
最终代码如下:
jsonp('https://api.domain.com/v1/', {
param: queryString,
timeout: 2000,
}, (err, data) => {
if (err) {
console.log(err)
} else {
console.log(data);
}
})
但是如果换做如下写法,则能正常运行:
jsonp('https://api.domain.com/v1/?'+queryString,(err,data)=>{
if (err){
console.log(err)
}else{
console.log(data);
}
})
四、axios-jsonp
上次维护:4年前,体积:5.15KB
最后,在查询资料时,发现一款名叫axios-jsonp的插件,官方说明,大概意思就是让axios-jsonp,其实说白了也就是axios的一款适配器,正好我们的项目都安装了axios,于是果断下载尝试,发现也很好用。
import axios from "axios";
import jsonp from 'axios-jsonp';
axios.get('https://api.domain.com/v1/',{
params:{
......
},
adapter:jsonp
}).then(res=>{
console.log(res)
}).catch(err=>{
console.log(err)
})
美中不足的时,这款插件上次维护时间是4年以前,不过考虑其体积小,我们最后还是决定使用axios-jsonp这款axios的适配器插件。
五、自己编写jsonp实现
其实在网上,看到有很多人确实是这么做的,有时间的伙伴可以自行尝试。
如果您在解决vue3中进行jsonp请求时,有什么好的解决方案,也欢迎分享给我们,大家一起进步。
- CSS选择器:nth-child()的灵活用法及常见场景示例
CSS选择器中的nth-child()相信大家都比较熟悉,nth-child()和nth-of-type()的区别是:nth-child()不区分类型。大家经常
- 为什么你的logo图模糊不清,移动端图片虚化的解决方案
在传统pc时代的时候,几乎99%的网站都在使用图片格式作为logo,而大部分网站都使用了png透明底的图片来做网站的logo。但是进入移动时代之后,这种习惯还是
- 响应式网站布局的优缺点分析
响应式网站,通俗的讲就是使用CSS媒体查询技术,写一套代码,可以在多个终端上使用。在此之前,前端切图工作者是需要分别针对电脑端、移动端和平板等常见设备专门去写一
- 切图和前端什么关系?为什么前端又被称为切图仔?
很多初从事前端切图这个行业的新人,大多都有一个疑问?为什么要把前端开发人员称为切图仔呢?提起这个问题,我们还要从前端切图行业的发展历程来说起,当然,这个问题对与
- 目前主流的前端框架有哪些?
基本上每种语言都有对应的一些快速框架用于提升开发人员的效率,所谓框架更像是工具箱或者脚手架,在开发时如果能很好的利用框架可以起到事半功倍的效果。简单形象的说,如
- 移动端background-attachment: fixed失效解决方法
在做web前端切图时,我们经常需要做背景图片不跟随内容滚动的效果,这个时候就需要使用到background-attachment: fixed 属性,这个属性及