在vue中使用jsonp进行跨域请求接口操作


Posted in Javascript onOctober 29, 2020

前言:

这里我们使用的是第三方插件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进行跨域请求接口操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
XML+XSL 与 HTML 两种方案的结合
Apr 22 Javascript
可以显示单图片,多图片ajax请求的ThickBox3.1类下载
Dec 23 Javascript
一个JavaScript处理textarea中的字符成每一行实例
Sep 22 Javascript
JS实现的倒计时效果实例(2则实例)
Dec 23 Javascript
javascript实现简单的on事件绑定
Aug 23 Javascript
node.js学习之base64编码解码
Oct 21 Javascript
详解获取jq ul第一个li定位的四种解决方案
Nov 23 Javascript
vue 运用mock数据的示例代码
Nov 07 Javascript
详解JS取出两个数组中的不同或相同元素
Mar 20 Javascript
vue+element搭建后台小总结 el-dropdown下拉功能
Apr 10 Javascript
vue+elementui实现点击table中的单元格触发事件--弹框
Jul 18 Javascript
用JS实现飞机大战小游戏
Jun 09 Javascript
基于react项目打包css引用路径错误解决方案
Oct 28 #Javascript
design vue 表格开启列排序的操作
Oct 28 #Javascript
ant design vue导航菜单与路由配置操作
Oct 28 #Javascript
JS实现多功能计算器
Oct 28 #Javascript
JS实现简单贪吃蛇小游戏
Oct 28 #Javascript
VUE和Antv G6实现在线拓扑图编辑操作
Oct 28 #Javascript
在vue项目中引用Antv G2,以饼图为例讲解
Oct 28 #Javascript
You might like
在PHP中使用XML
2006/10/09 PHP
基于HTTP长连接的&quot;服务器推&quot;技术的php 简易聊天室
2009/10/31 PHP
php中eval函数的危害与正确禁用方法
2014/06/30 PHP
php实现Linux服务器木马排查及加固功能
2014/12/29 PHP
ucenter通信原理分析
2015/01/09 PHP
jQuery 源代码显示控件 (Ajax加载方式).
2009/05/18 Javascript
JavaScript 继承的实现
2009/07/09 Javascript
理解JavaScript中的对象 推荐
2011/01/09 Javascript
jquery导航制件jquery鼠标经过变色效果示例
2013/12/05 Javascript
js中hash和ico的关联分析
2015/02/05 Javascript
JQuery中Text方法用法实例分析
2015/05/18 Javascript
JavaScript学习笔记之数组随机排序
2016/03/23 Javascript
js表单验证实例讲解
2016/03/31 Javascript
React Native 通告消息竖向轮播组件的封装
2020/08/25 Javascript
elemetUi 组件--el-upload实现上传Excel文件的实例
2017/10/27 Javascript
vue-cli配置环境变量的方法
2018/07/09 Javascript
微信小程序使用字体图标的方法
2019/05/23 Javascript
Vue使用虚拟dom进行渲染view的方法
2019/12/26 Javascript
[01:03]悬念揭晓 11月26日DOTA2完美盛典不见不散
2017/11/23 DOTA
Python连接MySQL并使用fetchall()方法过滤特殊字符
2016/03/13 Python
python绘制漏斗图步骤详解
2019/03/04 Python
python 实现绘制整齐的表格
2019/11/18 Python
解决Python 异常TypeError: cannot concatenate 'str' and 'int' objects
2020/04/08 Python
一款基于css3的动画按钮代码教程
2014/11/23 HTML / CSS
Lentiamo荷兰:在线订购隐形眼镜、隐形眼镜液和太阳镜
2019/10/25 全球购物
接口可以包含哪些成员
2012/09/30 面试题
机电一体化大学生求职信
2013/11/08 职场文书
收银员的岗位职责范本
2014/02/04 职场文书
2015年留守儿童工作总结
2015/05/22 职场文书
2015秋季开学典礼主持词
2015/07/16 职场文书
小学班主任教育随笔
2015/08/15 职场文书
2016父亲节感恩话语
2015/12/09 职场文书
教你做个可爱的css滑动导航条
2021/06/15 HTML / CSS
python周期任务调度工具Schedule使用详解
2021/11/23 Python
SONY600GR,国产收音机厂商永远的痛
2022/04/05 无线电
SpringBoot项目部署到阿里云服务器的实现步骤
2022/06/28 Java/Android