在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 相关文章推荐
定义select的边框颜色
Apr 28 Javascript
JavaScript格式化数字的函数代码
Nov 30 Javascript
用最通俗易懂的代码帮助新手理解javascript闭包 推荐
Mar 01 Javascript
javascript实现iframe框架延时加载的方法
Oct 30 Javascript
jQuery实现鼠标悬停背景翻转的黑色导航菜单代码
Sep 14 Javascript
jquery实现的动态回到顶部特效代码
Oct 28 Javascript
基于JS实现限时抢购倒计时间表代码
May 09 Javascript
文本溢出插件jquery.dotdotdot.js使用方法详解
Jun 22 jQuery
Angular5.1新功能分享
Dec 21 Javascript
详解vue中点击空白处隐藏div的实现(用指令实现)
Apr 19 Javascript
详解如何使用router-link对象方式传递参数?
May 02 Javascript
vue引入微信sdk 实现分享朋友圈获取地理位置功能
Jul 04 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作的文本留言本的例子(三)
2006/10/09 PHP
建立动态的WML站点(一)
2006/10/09 PHP
也谈截取首页新闻 - 范例
2006/10/09 PHP
IIS下配置Php+Mysql+zend的图文教程
2006/12/08 PHP
PHP_MySQL教程-第一天
2007/03/18 PHP
destoon出现验证码不显示时的紧急处理方法
2014/08/22 PHP
windows下配置php5.5开发环境及开发扩展
2014/12/25 PHP
php使用parse_url和parse_str解析URL
2015/02/22 PHP
php生成zip文件类实例
2015/04/07 PHP
PHP文件系统管理(实例讲解)
2017/09/19 PHP
PHP连接MySQL数据库的三种方式实例分析【mysql、mysqli、pdo】
2019/11/04 PHP
jQuery构造函数init参数分析续
2015/05/13 Javascript
JS实现在状态栏显示打字效果完整实例
2015/11/02 Javascript
js实现将选中内容分享到新浪或腾讯微博
2015/12/16 Javascript
基于JavaScript实现跳转提示页面
2016/09/24 Javascript
原生js实现商品放大镜效果
2017/01/12 Javascript
vue.js中引入vuex储存接口数据及调用的详细流程
2017/12/14 Javascript
[52:06]完美世界DOTA2联赛决赛日 Inki vs LBZS 第一场 11.08
2020/11/10 DOTA
Python实现的使用telnet登陆聊天室实例
2015/06/17 Python
Python实现保证只能运行一个脚本实例
2015/06/24 Python
Python操作MySQL数据库9个实用实例
2015/12/11 Python
Tensorflow使用tfrecord输入数据格式
2018/06/19 Python
Mac在python3环境下安装virtualwrapper遇到的问题及解决方法
2019/07/09 Python
详解CSS 3 中的 calc() 方法
2018/01/12 HTML / CSS
英国最大的纸工艺品商店:CraftStash
2018/12/01 全球购物
JACK & JONES荷兰官网:男士服装和鞋子
2021/03/07 全球购物
意大利单身交友网站:Meetic
2020/07/12 全球购物
办公室主任职责范文
2013/11/08 职场文书
口头翻译求职人自荐信
2013/12/07 职场文书
深入开展党的群众路线教育实践活动方案
2014/02/04 职场文书
绍兴鲁迅故居导游词
2015/02/09 职场文书
龙潭大峡谷导游词
2015/02/10 职场文书
中国文明网2015年“向国旗敬礼”活动网上签名寄语
2015/09/24 职场文书
Java实现简易的分词器功能
2021/06/15 Java/Android
PostgreSQL数据库创建并使用视图以及子查询
2022/04/11 PostgreSQL
Python四款GUI图形界面库介绍
2022/06/05 Python