在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 相关文章推荐
js 对象是否存在判断
Jul 15 Javascript
javascript getElementsByTagName
Jan 31 Javascript
JavaScript中的函数的两种定义方式和函数变量赋值
May 12 Javascript
sogou地图API用法实例教程
Sep 11 Javascript
编写高质量JavaScript代码的基本要点
Mar 02 Javascript
微信小程序 canvas API详解及实例代码
Oct 08 Javascript
Jquery树插件zTree实现菜单树
Jan 24 Javascript
angular实现表单验证及提交功能
Feb 01 Javascript
详解vuejs几种不同组件(页面)间传值的方式
Jun 01 Javascript
Node.js Buffer用法解读
May 18 Javascript
在Angular中使用JWT认证方法示例
Sep 10 Javascript
JQuery样式操作、click事件以及索引值-选项卡应用示例
May 14 jQuery
基于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函数解决SQL injection
2006/12/09 PHP
在Windows下编译适用于PHP 5.2.12及5.2.13的eAccelerator.dll(附下载)
2010/05/04 PHP
根据ip调用新浪api获取城市名并转成拼音
2014/03/07 PHP
ThinkPHP分组下自定义标签库实例
2014/11/01 PHP
php ajax异步读取rss文档数据
2016/03/29 PHP
PHP7 list() 函数修改
2021/03/09 PHP
Javascript开发包大全整理
2006/12/22 Javascript
插件:检测javascript的内存泄漏
2007/03/04 Javascript
js限制文本框只能输入数字(正则表达式)
2012/07/15 Javascript
AngularJS转换响应内容
2016/01/27 Javascript
JS中JSON对象和String之间的互转及处理技巧
2016/04/06 Javascript
基于Bootstrap和jQuery构建前端分页工具实例代码
2016/11/23 Javascript
canvas绘图不清晰的解决方案
2017/02/28 Javascript
bootstrap里bootstrap动态加载下拉框的实例讲解
2018/08/10 Javascript
javascript自定义加载loading效果
2020/09/15 Javascript
详尽讲述用Python的Django框架测试驱动开发的教程
2015/04/22 Python
Python2.x利用commands模块执行Linux shell命令
2016/03/11 Python
python reduce 函数使用详解
2017/12/05 Python
python 读取摄像头数据并保存的实例
2018/08/03 Python
python re库的正则表达式入门学习教程
2019/03/08 Python
django中使用事务及接入支付宝支付功能
2019/09/15 Python
Python如何在main中调用函数内的函数方式
2020/06/01 Python
详解canvas绘制网络字体几种方法
2019/08/27 HTML / CSS
美国电视购物:QVC
2017/02/06 全球购物
菲律宾领先的在线时尚商店:Zalora菲律宾
2018/02/08 全球购物
澳洲在线厨具商店:Kitchen Style
2018/05/05 全球购物
课程设计心得体会
2013/12/28 职场文书
岗位聘任书范文
2014/03/29 职场文书
法制宣传月活动方案
2014/05/11 职场文书
品牌服务方案
2014/06/03 职场文书
汽车运用工程专业求职信
2014/06/18 职场文书
金融专业毕业生自荐信
2014/06/26 职场文书
现实表现材料范文
2014/12/23 职场文书
2015年乡镇工会工作总结
2015/05/19 职场文书
详解PHP服务器如何在有限的资源里最大提升并发能力
2021/05/25 PHP
用Python进行栅格数据的分区统计和批量提取
2021/05/27 Python