
安装
npm install jsonp -S
引入
一般新建一个JS文件来引入原始JSONp插件,然后对原始插件进行封装,对跨域接口参数的拼接,封装好这个jsonp文件后Export出去,之后在哪里用到就再在那里import。
新建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) : '' }
使用
可以在专门请求接口的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, {})
}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()
}
}我就废话不多说了,大家还是直接看代码吧~
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:''; }





网友评论文明上网理性发言 已有0人参与
发表评论: