在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 相关文章推荐
一个原生的用户等级的进度条
Jul 03 Javascript
自写的一个jQuery圆角插件
Oct 26 Javascript
ASP.NET jQuery 实例15 通过控件CustomValidator验证CheckBoxList
Feb 03 Javascript
javascript中取前n天日期的两种方法分享
Jan 26 Javascript
JS实现两表格里数据来回转移的方法
May 28 Javascript
异步加载JS、CSS代码(推荐)
Jun 15 Javascript
jQuery web 组件 后台日历价格、库存设置的代码
Oct 14 Javascript
原生JS实现 MUI导航栏透明渐变效果
Nov 07 Javascript
详解使用vue-cli脚手架初始化Vue项目下的项目结构
Mar 08 Javascript
JavaScript类数组对象转换为数组对象的方法实例分析
Jul 24 Javascript
vue eslint简要配置教程详解
Jul 26 Javascript
vue实现登录页面的验证码以及验证过程解析(面向新手)
Aug 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
建立文件交换功能的脚本(一)
2006/10/09 PHP
PHP中$_SERVER的详细参数与说明介绍
2013/10/26 PHP
Laravel最佳分割路由文件(routes.php)的方式
2016/08/04 PHP
如何重写Laravel异常处理类详解
2020/12/20 PHP
javascript简单实现表格行间隔显示颜色并高亮显示
2013/11/29 Javascript
超简单JS二级、多级联动的简单实例
2014/02/18 Javascript
利用原生JavaScript获取元素样式只是获取而已
2014/10/08 Javascript
使用jQueryMobile实现滑动翻页效果的方法
2015/02/04 Javascript
js控件Kindeditor实现图片自动上传功能
2020/07/20 Javascript
javascript中的深复制详解及实例分析
2016/12/29 Javascript
NodeJS创建最简单的HTTP服务器
2017/05/15 NodeJs
微信小程序 scroll-view实现锚点滑动的示例
2017/12/06 Javascript
swiper 解决动态加载数据滑动失效的问题
2018/02/26 Javascript
原生JS forEach()和map()遍历的区别、兼容写法及jQuery $.each、$.map遍历操作
2019/02/27 jQuery
vue 图片裁剪上传组件的实现
2020/11/12 Javascript
[01:31]完美与DOTA2历程
2014/07/31 DOTA
如何将python中的List转化成dictionary
2016/08/15 Python
python制作小说爬虫实录
2017/08/14 Python
梅尔倒谱系数(MFCC)实现
2019/06/19 Python
python中的函数递归和迭代原理解析
2019/11/14 Python
Python多个装饰器的调用顺序实例解析
2020/05/22 Python
一款恶搞头像特效的制作过程 利用css3和jquery
2014/11/21 HTML / CSS
html5文字阴影效果text-shadow使用示例
2013/07/25 HTML / CSS
英国在线汽车和面包车零件商店:Car Parts 4 Less
2018/08/15 全球购物
澳大利亚实惠时尚女装商店:Katies
2019/06/16 全球购物
大学生职业规划前言模板
2013/12/27 职场文书
小学音乐教学反思
2014/02/05 职场文书
《一本男孩子必读的书》教学反思
2014/02/19 职场文书
美国留学经济担保书
2014/05/20 职场文书
委托书范本
2014/09/13 职场文书
2014最新党员批评与自我批评材料
2014/09/24 职场文书
组织生活会表态发言材料
2014/10/17 职场文书
教师节座谈会主持词
2015/07/03 职场文书
创业计划书之物流运送
2019/09/17 职场文书
Golang MatrixOne使用介绍和汇编语法
2022/04/19 Golang
Nginx文件已经存在全局反向代理问题排查记录
2022/07/15 Servers