vuejs调用php接口跨域,在vue中使用jsonp进行跨域请求接口操作

前言:

这里我们使用的是第三方插件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进行跨域请求接口操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值