在vue中使用jsonp进行跨域请求接口操作
#代码知识 发布时间: 2026-01-12
前言:

这里我们使用的是第三方插件jsonp。
github网址:https://github.com/webmodules/jsonp
1、安装
npm install jsonp -S
2、引入
一般新建一个js文件来引入原始jsonp插件,然后对原始插件进行封装,对跨域接口参数的拼接,封装好这个jsonp文件后export出去,之后在哪里用到就再在那里import。
1.新建jsonp.js文件来封装原始jsonp插件
// 引入原始jsonp插件
import originJsonp from 'jsonp'
/*
封装原jsonp插件,返回promise对象
url: 请求地址
data:请求的json参数
option:其他json参数,默认直接写空对象即可
*/
export default function jsonp (url, data, option) {
url += (url.indexOf('?') < 0 ? '?' : '&') + param(data)
return new Promise((resolve, reject) => {
// originJsonp中的参数说明可以到前言中的github中查看
originJsonp(url, option, (err, data) => {
if (!err) {
resolve(data)
} else {
reject(err)
}
})
})
}
/*
封装url参数的拼接
*/
function param (data) {
let url = ''
for (var k in data) {
let value = data[k] !== undefined ? data[k] : ''
// 防止参数为中文时出现乱码,把字符串作为 URI 组件进行编码
url += `&${k}=${encodeURIComponent(value)}`
}
return url ? url.substring(1) : ''
}
3、使用
可以在专门请求接口的js文件夹中新建一个getCurrentCity.js文件来跨域获取接口数据。
// 引入封装好的jsonp
import jsonp from 'common/js/jsonp.js'
// 假设这里为跨域请求当前城市的接口
export function getCurrentCity () {
// 接口地址
let url = 'https://api.map.baidu.com'
// 所需参数
let datas = {
'qt': 'dec',
'ie': 'utf-8',
'oue': 1,
'fromproduct': 'jsapi',
'res': 'api',
'ak': 'QWilijLzYd6pCmTrHilAeWjbG41zMiXc'
}
return jsonp(url, datas, {})
}
4、最后在vue组件中取到接口数据
import {getCurrentCity} from 'common/apis/getCurrentCity.js'
export default {
methods:{
_getCurrentCity () {
// 在这里就可以获取到当前城市的接口数据了
getCityCurrent().then((res) => {
// 打印出获取到的数据
console.log(res)
}).catch((err) => {
console.log(err)
})
}
},
mounted () {
this._getCurrentCity()
}
}
补充知识:Vue中关于axios和jsonp的封装
我就废话不多说了,大家还是直接看代码吧~
import qs from 'qs'
import axios from 'axios'
//拦截器
axios.interceptors.request.use(function (config) {
console.log('正在发送请求哦...')//添加loading效果
return config;
}, function (error) {
return Promise.reject(error);
});
// Add a response interceptor
axios.interceptors.response.use(function (response) {
console.log('请求成功啦...')
return response;
}, function (error) {
return Promise.reject(error);
});
const ajax={
post:function(url,data={}){
return new Promise((resolve,reject)=>{
axios.post(url,qs.stringify(data)).then(function(res){
resolve(res.data)
}).catch(function(err){
reject(err)
})
})
},
get:function(url,data={}){
return new Promise((resolve,reject)=>{
axios.get(url,{params:qs.stringify(data)}).then(function(res){
resolve(res.data)
}).catch(function(err){
reject(err)
})
})
},
}
export default ajax;
在main.js中
import ajax from './common/api/index.js'
Vue.prototype.$post=ajax.post Vue.prototype.$get=ajax.get
jsonp
import originJSONP from 'jsonp'
/*
jsonp(url,option,callbackFn)
{name:1,age:20}
www.aaa.com/?
*/
export default function(url,data,option){
url+=(url.indexOf('?')<0 ? '?' : '&' )+param(data);
return new Promise(function(resolve,reject){
originJSONP(url,option,function(err,res){
if(!err){
resolve(res);
}else{
reject(err)
}
})
})
}
/*
{name='aa',age=20}
&name=aa&age=20
*/
function param(data){
let url='';
for(let key in data){
let item =data[key]!==undefined ? data[key] : '';
url+=`&${key}=${encodeURIComponent(item)}`
}
return url ? url:'';
}
以上这篇在vue中使用jsonp进行跨域请求接口操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
代码知识SEO上一篇 : Python生成pdf目录书签的实例方法
下一篇 : 关于idea引入spring boot <parent></parent>父依赖标红问题
-
SEO外包最佳选择国内专业的白帽SEO机构,熟知搜索算法,各行业企业站优化策略!
SEO公司
-
可定制SEO优化套餐基于整站优化与品牌搜索展现,定制个性化营销推广方案!
SEO套餐
-
SEO入门教程多年积累SEO实战案例,从新手到专家,从入门到精通,海量的SEO学习资料!
SEO教程
-
SEO项目资源高质量SEO项目资源,稀缺性外链,优质文案代写,老域名提权,云主机相关配置折扣!
SEO资源
-
SEO快速建站快速搭建符合搜索引擎友好的企业网站,协助备案,域名选择,服务器配置等相关服务!
SEO建站
-
快速搜索引擎优化建议没有任何SEO机构,可以承诺搜索引擎排名的具体位置,如果有,那么请您多注意!专业的SEO机构,一般情况下只能确保目标关键词进入到首页或者前几页,如果您有相关问题,欢迎咨询!