在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 相关文章推荐
讲两件事:1.this指针的用法小探. 2.ie的attachEvent和firefox的addEventListener在事件处理上的区别
Apr 12 Javascript
javascript 支持链式调用的异步调用框架Async.Operation
Aug 04 Javascript
javascript 无提示关闭窗口脚本
Aug 17 Javascript
javascript实现下雪效果【实例代码】
May 03 Javascript
BootStrap中关于Select下拉框选择触发事件及扩展
Nov 22 Javascript
使用JavaScript为一张图片设置备选路径的方法
Jan 04 Javascript
JS+CSS实现下拉刷新/上拉加载插件
Mar 31 Javascript
vue 的keep-alive缓存功能的实现
Mar 22 Javascript
react 兄弟组件如何调用对方的方法示例
Oct 23 Javascript
微信小程序实现上传word、txt、Excel、PPT等文件功能
May 23 Javascript
微信小程序位置授权处理方法
Jun 13 Javascript
微信js-sdk 录音功能的示例代码
Nov 01 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中设置index.php文件为只读的方法
2013/02/06 PHP
解析使用substr截取UTF-8中文字符串出现乱码的问题
2013/06/20 PHP
php不允许用户提交空表单(php空值判断)
2013/11/12 PHP
Json_decode 解析json字符串为NULL的解决方法(必看)
2017/02/17 PHP
PHP将数据导出Excel表中的实例(投机型)
2017/07/31 PHP
php 后端实现JWT认证方法示例
2018/09/04 PHP
Linux基于php-fpm模式的lamp搭建phpmyadmin的方法
2018/10/25 PHP
php+ajax实现商品对比功能示例
2019/04/13 PHP
JavaScript 动态添加表格行 使用模板、标记
2009/10/24 Javascript
基于jquery的自定义鼠标提示效果 jquery.toolTip
2010/11/14 Javascript
JavaScript字符串对象slice方法入门实例(用于字符串截取)
2014/10/16 Javascript
28个常用JavaScript方法集锦
2015/01/14 Javascript
JS实现超炫网页烟花动画效果的方法
2015/03/02 Javascript
javascript限制文本框输入值类型的方法
2015/05/07 Javascript
javascript实现查找数组中最大值方法汇总
2016/02/13 Javascript
动态设置form表单的action属性的值的简单方法
2016/05/25 Javascript
jQuery实现立体式数字动态增加(animate方法)
2016/12/21 Javascript
Javascript面试经典套路reduce函数查重
2017/03/23 Javascript
JQuery 选择器、DOM节点操作练习实例
2017/09/28 jQuery
Vue使用枚举类型实现HTML下拉框步骤详解
2018/02/05 Javascript
在Vant的基础上封装下拉日期控件的代码示例
2018/12/05 Javascript
vue 实现小程序或商品秒杀倒计时
2019/04/14 Javascript
JavaScript实现鼠标经过表格某行时此行变色
2020/11/20 Javascript
Python实现保证只能运行一个脚本实例
2015/06/24 Python
python基础教程项目三之万能的XML
2018/04/02 Python
用Q-learning算法实现自动走迷宫机器人的方法示例
2019/06/03 Python
Python解析json时提示“string indices must be integers”问题解决方法
2019/07/31 Python
基于opencv实现简单画板功能
2020/08/02 Python
印度化妆品购物网站:Nykaa
2018/07/22 全球购物
水污染治理专业毕业生推荐信
2013/11/14 职场文书
售后专员岗位职责
2013/12/08 职场文书
文明城市标语
2014/06/16 职场文书
信访工作汇报材料
2014/10/27 职场文书
2014年党员个人工作总结
2014/12/02 职场文书
张丽莉观后感
2015/06/16 职场文书
三种方式清除vue路由跳转router-link的历史记录
2022/04/10 Vue.js