在vue中使用jsonp進(jìn)行跨域請求接口操作
前言:
這里我們使用的是第三方插件jsonp。
github網(wǎng)址:https://github.com/webmodules/jsonp
1、安裝
npm install jsonp -S
2、引入
一般新建一個(gè)js文件來引入原始jsonp插件,然后對原始插件進(jìn)行封裝,對跨域接口參數(shù)的拼接,封裝好這個(gè)jsonp文件后export出去,之后在哪里用到就再在那里import。
1.新建jsonp.js文件來封裝原始jsonp插件
// 引入原始jsonp插件
import originJsonp from 'jsonp'
/*
封裝原jsonp插件,返回promise對象
url: 請求地址
data:請求的json參數(shù)
option:其他json參數(shù),默認(rèn)直接寫空對象即可
*/
export default function jsonp (url, data, option) {
url += (url.indexOf('?') < 0 ? '?' : '&') + param(data)
return new Promise((resolve, reject) => {
// originJsonp中的參數(shù)說明可以到前言中的github中查看
originJsonp(url, option, (err, data) => {
if (!err) {
resolve(data)
} else {
reject(err)
}
})
})
}
/*
封裝url參數(shù)的拼接
*/
function param (data) {
let url = ''
for (var k in data) {
let value = data[k] !== undefined ? data[k] : ''
// 防止參數(shù)為中文時(shí)出現(xiàn)亂碼,把字符串作為 URI 組件進(jìn)行編碼
url += `&${k}=${encodeURIComponent(value)}`
}
return url ? url.substring(1) : ''
}
3、使用
可以在專門請求接口的js文件夾中新建一個(gè)getCurrentCity.js文件來跨域獲取接口數(shù)據(jù)。
// 引入封裝好的jsonp
import jsonp from 'common/js/jsonp.js'
// 假設(shè)這里為跨域請求當(dāng)前城市的接口
export function getCurrentCity () {
// 接口地址
let url = 'https://api.map.baidu.com'
// 所需參數(shù)
let datas = {
'qt': 'dec',
'ie': 'utf-8',
'oue': 1,
'fromproduct': 'jsapi',
'res': 'api',
'ak': 'QWilijLzYd6pCmTrHilAeWjbG41zMiXc'
}
return jsonp(url, datas, {})
}
4、最后在vue組件中取到接口數(shù)據(jù)
import {getCurrentCity} from 'common/apis/getCurrentCity.js'
export default {
methods:{
_getCurrentCity () {
// 在這里就可以獲取到當(dāng)前城市的接口數(shù)據(jù)了
getCityCurrent().then((res) => {
// 打印出獲取到的數(shù)據(jù)
console.log(res)
}).catch((err) => {
console.log(err)
})
}
},
mounted () {
this._getCurrentCity()
}
}
補(bǔ)充知識:Vue中關(guān)于axios和jsonp的封裝
我就廢話不多說了,大家還是直接看代碼吧~
import qs from 'qs'
import axios from 'axios'
//攔截器
axios.interceptors.request.use(function (config) {
console.log('正在發(fā)送請求哦...')//添加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進(jìn)行跨域請求接口操作就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
element-ui?tree?手動(dòng)展開功能實(shí)現(xiàn)(異步樹也可以)
這篇文章主要介紹了element-ui?tree?手動(dòng)進(jìn)行展開(異步樹也可以),項(xiàng)目中用到了vue的element-ui框架,用到了el-tree組件,需要的朋友可以參考下2022-08-08
Vue項(xiàng)目打包部署后瀏覽器自動(dòng)清除緩存問題的解決方法
這篇文章主要介紹了vue打包部署后 瀏覽器緩存問題,導(dǎo)致控制臺(tái)報(bào)錯(cuò)ChunkLoadError: Loading chunk failed的解決方案,文中有相關(guān)的圖文和代碼供大家參考,具有一定的參考價(jià)值,需要的朋友可以參考下2024-12-12
ElementUI嵌套頁面及關(guān)聯(lián)增刪查改實(shí)現(xiàn)示例
本文主要介紹了ElementUI嵌套頁面及關(guān)聯(lián)增刪查改實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07
vue?使用addRoutes動(dòng)態(tài)添加路由及刷新頁面跳轉(zhuǎn)404路由的問題解決方案
我自己使用addRoutes動(dòng)態(tài)添加的路由頁面,使用router-link標(biāo)簽可以跳轉(zhuǎn),但是一刷新就會(huì)自動(dòng)跳轉(zhuǎn)到我定義的通配符?*?指向的404路由頁面,這說明沒有找到指定路由才跳到404路由的,這樣的情況如何處理呢,下面小編給大家分享解決方案,一起看看吧2023-10-10
Vue+element使用row-class-name修改el-table某一行解決背景色無效的方法
本文主要介紹了Vue+element使用row-class-name修改el-table某一行解決背景色無效的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01

