在vue中使用axios實現跨域請求並且設定返回的資料的格式是json格式,而不是jsonp格式
在vue中使用axios實現跨域請求
需求分析:在專案中需要抓取qq音樂的歌曲列表的資料,由於要請求資料的地址url=https://c.y.qq.com/splcloud/fcgi-bin/fcg_get_diss_by_tag.fcg。從qq音樂的官網上可以看到該請求的請求頭中的referer中的域名是y.qq.com(傳送請求頁面的域名),而host的域名是c.y.qq.com(被請求頁面的域名),由於兩者不一樣,所以不能通過前端直接傳送請求給qq伺服器去拿資料。這時候需要伺服器做一個代理:即前端向其所在域的伺服器傳送一個請求,然後所在域的伺服器向qq音樂所在域的伺服器傳送請求,所在域的伺服器拿到資料後,然後返回給前端。
在vue中使用axios實現跨域請求。axios 是一個基於 promise 的 HTTP 庫,可以用在瀏覽器和 node.js 中。
下面介紹如何利用axios實現代理
1、首先使用npm安裝axios到本地專案中
npm install axios --save
2、然後,在build/webpack.dev.conf.js中引入axois
3、在在build/webpack.dev.conf.js檔案中的devServer物件新增屬性函式before(app){}
完整的程式碼如下
before(app){ // 由於請求的referer和host不同,所以前端不能拿到資料,需要後端做一個代理 // 後端向有資料的服務端傳送請求,拿到資料,然後前端在向自己的伺服器請求那資料 // 這裡使用axios實現ajax請求:axios是一個基於promise的HTTP庫,可以用於瀏覽器和node.js // 在瀏覽器建立XMLHttpRequest物件,從node.js建立http請求 app.get('/api/getDiscList',(req, res) => {//這裡的路徑是給前端傳送請求的url let url = 'https://c.y.qq.com/splcloud/fcgi-bin/fcg_get_diss_by_tag.fcg // axios傳送get請求,可以自己配置config axios.get(url, { headers: { 'referer': 'https://c.y.qq.com/', 'host': 'c.y.qq.com', }, // params是即將與請求一起傳送的url引數,無格式物件/URLSearchParams物件 params: req.quest }).then((response) => { res.json(response.data) //返回資料 }).catch((error) => { console.log(error) }) }) }
4、在前端書寫js程式碼
1)定義一個recommend.js檔案,內容如下
import axios from 'axios' //獲取歌曲列表的資料 //由於這裡使用了代理請求,所以前端的請求要改成ajax請求 export function getDisList() { const url = '/api/getDiscList' const data = { picmid: 1, rnd: Math.random(), g_tk: 5381, jsonpCallback: 'getPlaylist', loginUin: '0', hostUin: 0, format: 'json', inCharset: 'utf8', outCharse: 'utf-8', notice: 0, platform: 'yqq', needNewCode: 0, categoryId: 10000000, sortId: 5, sin: 0, ein: 29 } //使用ajax請求,這裡用axios return axios.get(url, { params: data }).then((res) => { // 成功返回一個Promise物件 return Promise.resolve(res.data) }).catch((error) => { console.log(error) }) }
2)在recommend.vue檔案的<script>中書寫下面內容
<script>
import {getDisList} from '../../api/recommend'
export default {
// 獲取資料
created() {
this._getDiscList()
},
methods: {
// 獲取歌單列表的資料
_getDiscList() {
getDisList().then((res) => {
console.log(res)
})
}
}
}
</script>
5、在瀏覽器console.log()輸出的內容
'MusicJsonCallback({"code":0,"subcode":0,"message":"","default":0,"data":{"uin":0,"categoryId":0,"sortId":5,"sum":0,"sin":0,"ein":0,"list":[]}})'
即輸出的是jsonp的格式,即字串
6、將返回的資料設定成json的格式:由於返回的資料是字串,那麼可以對其進行擷取,在利用JSON.parse()將字串轉換成json的形式
<script>
import {getDisList} from '../../api/recommend'
export default {
// 獲取資料
created() {
this._getDiscList()
},
methods: {
// 獲取歌單列表的資料
_getDiscList() {
getDisList().then((res) => {
console.log(res)
let num1 = res.indexOf('(')
let num2 = res.indexOf(')')
let resultData = JSON.parse(res.substring(num1 + 1, num2))
console.log(typeof(resultData))
console.log(resultData)
})
}
}
}
</script>
輸出如下
以上大概就是利用axios實現服務端的代理請求
相關推薦
在vue中使用axios實現跨域請求並且設定返回的資料的格式是json格式,而不是jsonp格式
在vue中使用axios實現跨域請求需求分析:在專案中需要抓取qq音樂的歌曲列表的資料,由於要請求資料的地址url=https://c.y.qq.com/splcloud/fcgi-bin/fcg_get_diss_by_tag.fcg。從qq音樂的官網上可以看到該請求的請求
vue中使用axios實現跨域請求
一、首先安裝npm安裝axios$ npm i axios -S二、配置vue-cli->config->index->proxyTableproxyTable: { "/api":{ target:"http://api.douban.com"
axios實現跨域請求
在使用vue.js進行開發,我們會遇到跨域請求的情況,這裡記錄下自己所遇到的情況。 使用的是目前主流的axios進行請求,首先開啟config資料夾下的index檔案,在proxyTable裡面新增程式碼 proxyTable: { '/api': { t
vue中axios解決跨域問題和攔截器使用
vue中axios不支援vue.use()方式宣告使用。 所以有兩種方法可以解決這點: 第一種: 在main.js中引入axios,然後將其設定為vue原型鏈上的屬性,這樣在元件中就可以直接 this.axios使用了 import axios fro
vue-cli項目本地代理實現跨域請求
con 跨域 請求 AR url 本地 dex ams gin 使用 Vue-cli 創建的項目,開發地址是 localhost:8080,需要訪問非本機上的接口http://10.1.0.34:8000/queryRole。不同域名之間的訪問,需要跨域才能正確請求。跨
Vue前端服務代理實現跨域請求資料。
開發中請求真實伺服器資料,配置伺服器代理實現跨域。 vue-cli + webpack 構建的專案 再 ./config/index.js 檔案中配置 proxyTable: { '/api':{ target: 'http://請求的伺服器地址',
Vue實現跨域請求
實現跨域請求有兩種方式: 1、fetch (1)在App.vue中使用created方法建立fetch,將域名及方法等建立,如下圖 (2)在config配置檔案中的index.js中的跨域區域中寫入如下程式碼: (3)完善資訊,將介面相應的需求補充完整
Vue前端配置代理實現跨域請求
跨域的解決方法: *設定讓伺服器允許跨域 *前端配置代理實現跨域請求 本文介紹前端配置代理實現跨域請求: 在專案config資料
vue-cli開發環境實現跨域請求
前端開發時,請求後臺介面經常需要跨域,vue-cli實現跨域請求只需要開啟config/index.js,修改如下內容即可。 //例如要請求的介面url為http://172.3.2.1:8000/look/1 module.exports = {
Vue 2.x 如何利用proxyTable實現跨域請求(反向代理)
在專案執行的時候嗎,不可缺少就是的設定反向代理的 詳細的文件 http-proxy-middleware 下載的官方的腳手架開啟檔案的build/dev-server.js 搜尋:(這個外掛官方
jQuery中Ajax+Spring MVC實現跨域請求
專案開發中,某個可獨立、也可整合的子業務模組需要向外開放相關API介面,先說下專案本身使用了jersery來實現RESTful webservice以名詞形式釋出API。有意思的
使用vue.js和axios解決跨域請求問題
使用jsonp可以跨域請求,但是jsonp只能夠用get方式跨域。其他跨域方式大多都要伺服器支援。 使用vue.js和axios能解決get/post方式的跨域。但需要vue.js/node.js的基礎知識。具體操作如下: 1、使用vue-cli腳手架建立一
vue proxyTable 接口跨域請求調試(五)
cau tsp {} war 遠程服務 調試 設置代理 row web 在不同域之間訪問是比較常見,在本地調試訪問遠程服務器。。。。這就是有域問題。 VUE解決通過proxyTable: 在 config/index.js 配置文件中 dev: { env:
利用jsonp實現跨域請求
get p地址 doc ajax請求 -s tar 原理 安全策略 都是 同源策略,它是由Netscape提出的一個著名的安全策略。現在所有支持JavaScript 的瀏覽器都會使用這個策略。所謂同源是指,域名,協議,端口相同。當一個瀏覽器的兩個tab頁中分別打開來 百
ajax獲取json數據及實現跨域請求
cgi size 域名 3.2 方便 nap 不清楚 anti dex 最近想練習一下ajax獲取json數據 , 首先上網找一些在線的可用來測試的接口. -----------------------------------------------------這裏是接口分
[轉] 利用CORS實現跨域請求
src 流程圖 exp 否則 expose 前端 eof 目前 star [From] http://newhtml.net/using-cors/ 跨域請求一直是網頁編程中的一個難題,在過去,絕大多數人都傾向於使用JSONP來解決這一問題。不過現在,我們可以考慮一下
Java Web應用中支持跨域請求
通過 sca info def gist time 並且 tomcat json 轉載:https://blog.csdn.net/lmy86263/article/details/51724221 由於工程合作開發的需要,後臺的應用要能支持跨域訪問,但是在這個跨域
django中配置允許跨域請求
apps ons token middle red href clas cors nbsp 對於django 安裝django-cors-headers,詳情請看官方文檔 pip install django-cors-headers 配置settings.py
八種方式實現跨域請求
防範 erro create ati brush col html5新特性 ole als 瀏覽器的同源策略 ? 提到跨域不能不先說一下”同源策略”。 ? 何為同源?只有當協議、端口、和域名都相同的頁面,則兩個頁面具有相同的源。只要網站的 協議名protocol、 主
WebAPI實現跨域請求
一、跨域問題的由來 目前專案實現前後端分離,所以就會那麼此時前端和後端分別在不同的伺服器上,此時就會涉及到跨域問題。再具體說明一下。 1.前後端未分離:原來我們的積分系統採用MVC框架,整個系統的前端以及後端邏輯都在一個解決方案中,此時我們稱之為前後端沒有分離。