vue中使用jsonp进行跨域请求接口

前言:

这里我们使用的是第三方插件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()
  }
}

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值