在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 相关文章推荐
jquery遍历input取得input的name
Apr 27 Javascript
location.href 在IE6中不跳转的解决方法与推荐使用代码
Jul 08 Javascript
js对列表中第一个值处理与jsp页面对列表中第一个值处理的区别详解
Nov 05 Javascript
Jquery获取和修改img的src值的方法
Feb 17 Javascript
Js中使用hasOwnProperty方法检索ajax响应对象的例子
Dec 08 Javascript
JS实现光滑展开合拢的菜单效果代码
Sep 16 Javascript
又一枚精彩的弹幕效果jQuery实现
Jul 25 Javascript
js中遍历Map对象的简单实例
Aug 08 Javascript
Angularjs的启动过程分析
Jul 18 Javascript
JavaScript基础之流程控制语句的用法
Aug 31 Javascript
vue3.0 CLI - 2.2 - 组件 home.vue 的初步改造
Sep 14 Javascript
webpack HappyPack实战详解
Oct 08 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
西德产收音机
2021/03/01 无线电
php数组的概述及分类与声明代码演示
2013/02/26 PHP
php实现memcache缓存示例讲解
2013/12/04 PHP
php实现以只读方式打开文件的方法
2015/03/16 PHP
ThinkPHP框架里隐藏index.php
2016/04/12 PHP
一次因composer错误使用引发的问题与解决
2019/03/06 PHP
IE8提示Invalid procedure call or argument 异常的解决方法
2012/09/30 Javascript
js关闭模态窗口刷新父页面或跳转页面
2012/12/13 Javascript
JS关闭窗口与JS关闭页面的几种方法小结
2013/12/17 Javascript
JS中实现简单Formatter函数示例代码
2014/08/19 Javascript
AngularJS初始化过程分析(引导程序)
2014/12/06 Javascript
js对字符的验证方法汇总
2015/02/04 Javascript
酷! 不同风格页面布局幻灯片特效js实现
2021/02/19 Javascript
Windows下使用Nodejs运行js的方法
2017/09/02 NodeJs
详解各版本React路由的跳转的方法
2018/05/10 Javascript
Vue项目中跨域问题解决方案
2018/06/05 Javascript
ionic grid(栅格)九宫格制作详解
2018/06/30 Javascript
vue 登录滑动验证实现代码
2018/08/24 Javascript
详解基于node.js的脚手架工具开发经历
2019/01/28 Javascript
layui点击数据表格添加或删除一行的例子
2019/09/12 Javascript
jQuery 常用特效实例小结【显示与隐藏、淡入淡出、滑动、动画等】
2020/05/19 jQuery
Django如何自定义分页
2018/09/25 Python
Python 实现大整数乘法算法的示例代码
2019/09/17 Python
django2.2安装错误最全的解决方案(小结)
2019/09/24 Python
使用HTML5的Notification API制作web通知的教程
2015/05/08 HTML / CSS
HTML5声音录制/播放功能的实现代码
2018/05/03 HTML / CSS
欧洲有机婴儿食品最大的市场:Organic Baby Food(供美国和加拿大)
2018/03/28 全球购物
英国领先的新鲜松露和最好的松露产品供应商:TruffleHunter
2019/08/26 全球购物
应届生.NET方向面试题
2015/05/23 面试题
村居抓节水倡议书
2014/05/19 职场文书
施工质量承诺书范文
2014/05/30 职场文书
无私奉献演讲稿
2014/09/04 职场文书
交通事故委托书范本(2篇)
2014/09/21 职场文书
学生喝酒检讨书500字
2014/11/02 职场文书
2015年教研室工作总结范文
2015/05/23 职场文书
关于Vue中的options选项
2022/03/22 Vue.js