在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 相关文章推荐
javascript动态加载实现方法一
Aug 22 Javascript
jQuery中:not选择器用法实例
Dec 30 Javascript
JavaScript中用于生成随机数的Math.random()方法
Jun 15 Javascript
跟我学习javascript创建对象(类)的8种方法
Nov 20 Javascript
Angularjs中$http以post请求通过消息体传递参数的实现方法
Aug 05 Javascript
jQuery使用unlock.js插件实现滑动解锁
Apr 04 jQuery
JS非空验证及邮箱验证的实例
Aug 11 Javascript
ionic3实战教程之随机布局瀑布流的实现方法
Dec 28 Javascript
JS实现同一DOM元素上onClick事件与onDblClick事件并存的解决方法
Jun 07 Javascript
js笔试题-接收get请求参数
Jun 15 Javascript
Vue中登录验证成功后保存token,并每次请求携带并验证token操作
Sep 08 Javascript
JSON 入门教程基础篇 json入门学习笔记
Sep 22 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实现动态web服务器方法
2015/07/29 PHP
php将远程图片保存到本地服务器的实现代码
2015/08/03 PHP
php利用fsockopen GET/POST提交表单及上传文件
2017/05/22 PHP
PHP文件管理之实现网盘及压缩包的功能操作
2017/09/20 PHP
实例讲解PHP页面静态化
2018/02/05 PHP
jQuery的一些特性和用法整理小结
2010/01/13 Javascript
JavaScript获得url查询参数的方法
2015/07/02 Javascript
浅谈$(document)和$(window)的区别
2015/07/15 Javascript
基于Vue实现支持按周切换的日历
2020/09/24 Javascript
基于vue.js路由参数的实例讲解——简单易懂
2017/09/07 Javascript
基于IView中on-change属性的使用详解
2018/03/15 Javascript
微信小程序使用scroll-view标签实现自动滑动到底部功能的实例代码
2018/11/09 Javascript
layui-laydate时间日历控件使用方法详解
2018/11/15 Javascript
JS中如何轻松遍历对象属性的方式总结
2019/08/06 Javascript
JS中的算法与数据结构之栈(Stack)实例详解
2019/08/20 Javascript
[01:04:14]OG vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
Python中处理字符串之endswith()方法的使用简介
2015/05/18 Python
Django与JS交互的示例代码
2017/08/23 Python
Python爬虫之正则表达式的使用教程详解
2018/10/25 Python
在Python中pandas.DataFrame重置索引名称的实例
2018/11/06 Python
pytorch 共享参数的示例
2019/08/17 Python
详解在python操作数据库中游标的使用方法
2019/11/12 Python
python 中值滤波,椒盐去噪,图片增强实例
2019/12/18 Python
python numpy数组复制使用实例解析
2020/01/10 Python
简述 Python 的类和对象
2020/08/21 Python
python中的垃圾回收(GC)机制
2020/09/21 Python
利用CSS3的线性渐变linear-gradient制作边框的示例
2016/06/02 HTML / CSS
浅析HTML5 meta viewport参数
2020/10/28 HTML / CSS
北美三大旅游网站之一:Travelocity加拿大
2016/08/20 全球购物
西班牙香水和化妆品连锁店:Druni
2019/05/05 全球购物
公共汽车、火车和飞机票的通用在线预订和销售平台:INFOBUS
2019/11/30 全球购物
文员的职业生涯规划发展方向
2014/02/08 职场文书
授权委托书
2014/07/31 职场文书
签证工作证明模板
2015/06/15 职场文书
nginx反向代理时如何保持长连接
2021/03/31 Servers
让JavaScript代码更加精简的方法技巧
2022/06/01 Javascript