vue开发:简单聊聊vue里面jsonp的使用方法。
最近在做手写输入法时遇到跨域问题,使用的是qq输入法的接口,代理无法实现效果,这里使用jsonp来实现。jsonp原理可以自行百度,这里记录一下vue-jsonp
的使用和踩的一点小坑,官方文档请前往npm地址。
安装
npm install vue-jsonp -S or yarn add vue-jsonp
调用
// main.js import Vue from 'vue' import { VueJsonp } from 'vue-jsonp' Vue.use(VueJsonp) // $jsonp被挂载到vue原型上,可直接使用vm.$jsonp()
应用
this.$jsonp('/some-jsonp-url', { myCustomUrlParam: 'veryNice' }).then(res => { // 此处代码不执行 // 因为会直接调用返回的那个回调函数 })
假设返回的函数名称为callbackFun,需要 在window对象上绑定 callbackFun函数。
mounted() { // 将callbackFun方法绑定到window对象 window['callbackFun'] = (data) => { cosole.log('定义的回调函数') } // 假设返回的为callbackFun.ajax_callback() window['callbackFun'] = { ajax_callback: function (res) { cosole.log('定义的回调函数') } } }
注意:jsonp请求方式仅为 get。
拓展
为了能在每个组件都使用,把vue-jsonp提供的方法再封装为单文件,创建一个common.js文件。
exports.install = function(Vue,options){// 参数:method(API名),data(请求参数对象) Vue.prototype.jsp = function(method,data){ // baseUrl就是服务器地址 const baseUrl = 'http://192.168.191.1:8000/'; let url = `${baseUrl}${method}?`; // jsonp请求参数和get方法类似,都是params的方式拼接 for(let item in data){ url += `&${item}=${data[item]}`; } return this.$jsonp(url); };}
同样,为了能全局使用,先在main.js上手动安装这个common.js
import Common from './main/common/common.js' Vue.use(Common);
好了,现在咱们可以在组件中使用封装过的jsonp方法了
methods:{ bookIfo(){ // 传入API名以及请求参数对象 this.jsp('bookIfo',{book:this.current}).then((data)=>{ this.book = data; }).catch((err)=>{ console.log(err); }) },}
本次分享就这么多内容了,大家去试试吧。
网友评论文明上网理性发言 已有0人参与
发表评论: