在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 相关文章推荐
在vs2010中调试javascript代码方法
Feb 11 Javascript
JqGrid web打印实现代码
May 31 Javascript
jquery表单验证插件(jquery.validate.js)的3种使用方式
Mar 28 Javascript
简单介绍JavaScript的变量和数据类型
Jun 03 Javascript
举例简介AngularJS的内部语言环境
Jun 17 Javascript
JavaScript中this详解
Sep 01 Javascript
jQuery+CSS实现滑动的标签分栏切换效果
Dec 17 Javascript
location.hash保存页面状态的技巧
Apr 28 Javascript
不使用script导入js文件的几种方法
Oct 27 Javascript
JavaScript递归函数解“汉诺塔”算法代码解析
Jul 05 Javascript
初探Vue3.0 中的一大亮点Proxy的使用
Dec 06 Javascript
小程序和web画三角形实现解析
Sep 02 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
15种PHP Encoder的比较
2007/03/06 PHP
PHP数组交集的优化代码分析
2011/03/06 PHP
实例讲解YII2中多表关联的使用方法
2017/07/21 PHP
PHP实现找出有序数组中绝对值最小的数算法分析
2017/08/07 PHP
laravel 验证错误信息到 blade模板的方法
2019/09/29 PHP
从零开始学习jQuery (十一) 实战表单验证与自动完成提示插件
2011/02/23 Javascript
javascript跨浏览器的属性判断方法
2014/03/16 Javascript
JQuery中的事件及动画用法实例
2015/01/26 Javascript
JS实现不规则TAB选项卡效果代码
2015/09/16 Javascript
jQuery动画效果实现图片无缝连续滚动
2016/01/12 Javascript
HTML5+Canvas调用手机拍照功能实现图片上传(上)
2017/04/21 Javascript
JS沙箱模式实例分析
2017/09/04 Javascript
vue内置组件transition简单原理图文详解(小结)
2018/07/12 Javascript
AngularJS修改model值时,显示内容不变的实例
2018/09/13 Javascript
vue鼠标悬停事件实例详解
2019/04/01 Javascript
vue element和nuxt的使用技巧分享
2021/01/14 Vue.js
python动态加载变量示例分享
2014/02/17 Python
Python实现去除代码前行号的方法
2015/03/10 Python
在Python的Flask中使用WTForms表单框架的基础教程
2016/06/07 Python
Python连接DB2数据库
2016/08/27 Python
PyQt5重写QComboBox的鼠标点击事件方法
2019/06/25 Python
浅析PyTorch中nn.Module的使用
2019/08/18 Python
python tkinter组件摆放方式详解
2019/09/16 Python
在vscode中配置python环境过程解析
2019/09/28 Python
python+selenium+chromedriver实现爬虫示例代码
2020/04/10 Python
利用python中的matplotlib打印混淆矩阵实例
2020/06/16 Python
2021年的Python 时间轴和即将推出的功能详解
2020/07/27 Python
应届行政管理专业个人自我评价
2013/12/28 职场文书
2014三八妇女节活动总结
2014/03/01 职场文书
企业厂务公开实施方案
2014/03/26 职场文书
合伙经营协议书
2014/04/18 职场文书
软件项目实施计划书
2014/05/02 职场文书
小学课外阅读总结
2014/07/09 职场文书
导游词之江西赣州
2019/10/15 职场文书
html5 录制mp3音频支持采样率和比特率设置
2021/07/15 Javascript
Go语言编译原理之源码调试
2022/08/05 Golang