Vue亂搞系列之a(chǎn)xios發(fā)起表單請求

簡單介紹

在半年前尤大就不推薦使用vue-resource了,好像我這么沒安全感的人,沒人維護(hù)的東西不敢碰。

1987062-b3255d564903d3d7.png

那么axios這個是什么呢?是一個國外友人開發(fā)的基于Promise 用于瀏覽器和 nodejs 的 HTTP 客戶端。它有什么用法呢:

  • 從瀏覽器中創(chuàng)建 XMLHttpRequest
  • 從 node.js 發(fā)出 http 請求
  • 支持 Promise API
  • 攔截請求和響應(yīng)
  • 轉(zhuǎn)換請求和響應(yīng)數(shù)據(jù)
  • 取消請求
  • 自動轉(zhuǎn)換JSON數(shù)據(jù)
  • 客戶端支持防止 [CSRF/XSRF](http://baike.baidu.com/link?* url=iUceAfgyfJOacUtjPgT4ifaSOxDULAc_MzcLEOTySflAn5iLlHfMGsZMtthBm5sK4y6skrSvJ1HOO2qKtV1ej_)

作者這造型一看就是大牛,以后有機(jī)會我也要搞一個,浪。


Paste_Image.png

反正功能很多啦,用法一搜一大堆。
英文:點(diǎn)這里看看官網(wǎng)教程

axios安裝

$ npm install axios

如果不用npm,可以通過cdn引入

<script src="https://unpkg.com/axios/dist/axios.min.js"></script>

axios基本用法

這里筆者使用的是es6,由于標(biāo)題是要結(jié)合vue,因此將vue、axios以及vue-axios引入。

import Vue from 'vue'
import axios from 'axios'
import VueAxios from 'vue-axios'
#通過use方法加載axios插件
Vue.use(VueAxios,axios)

看看有哪些用法:

axios.request(config)

axios.get(url[, config])

axios.delete(url[, config])

axios.head(url[, config])

axios.post(url[, data[, config]])

axios.put(url[, data[, config]])

axios.patch(url[, data[, config]])

就挑我們最熟悉的get和post來看看:

GET用法

.vue模板:

  var vm = this
  this.$http.get(vm.testUrl).then((response)=>{
                    alert(response.data.msg);
   })

這里我們通過this.$http去調(diào)用axios,如果之前你的vue-resourse也是這么寫的話,那簡直可以無縫切換。當(dāng)然你你換成this.axios也是沒有問題的,但擴(kuò)展性就不好了。

testUrl:

    public function test(){
        return json(array('status'=>1,'msg'=>'success'));
    }

現(xiàn)象:


Paste_Image.png

POST用法

這個post要重點(diǎn)說下,有坑。
.vue模板:

  var vm = this
  this.$http.post(vm.testUrl,{"name":"痞子達(dá)"})
  .then((response)=>{
          alert(response.data.msg);
  })

testUrl:

   public function test(){
        return json(array('statys'=>1,'msg'=>$_POST['name']));
    }

正常應(yīng)該彈出“痞子達(dá)”,但是并沒有,還報(bào)了500錯誤。
接口提示未定義數(shù)組索引: name

Paste_Image.png

抓包看了看,是以Request Payload的形式傳送了參數(shù)。
不是我們熟悉的form-data形式,看看api:

axios.post(url[, data[, config]])

第三個參數(shù)是config配置,這個配置應(yīng)該可以做點(diǎn)事兒。這個config的參數(shù)有很多,先看看(隨便瞅下就行):

  • url —— 用來向服務(wù)器發(fā)送請求的url
  • method —— 請求方法,默認(rèn)是GET方法
  • baseURL —— 基礎(chǔ)URL路徑,假如url不是絕對路徑,如https://some-domain.com/api/v1/login?name=jack,那么向服務(wù)器發(fā)送請求的URL將會是baseURL + url。
  • transformRequest —— transformRequest方法允許在請求發(fā)送到服務(wù)器之前修改該請求,此方法只適用于PUT、POST和PATCH方法中。而且,此方法最后必須返回一個string、ArrayBuffer或者Stream。
  • transformResponse —— transformResponse方法允許在數(shù)據(jù)傳遞到then/catch之前修改response數(shù)據(jù)。此方法最后也要返回?cái)?shù)據(jù)。
    headers —— 發(fā)送自定義Headers頭文件,頭文件中包含了http請求的各種信息。
  • params —— params是發(fā)送請求的查詢參數(shù)對象,對象中的數(shù)據(jù)會被拼接成url?param1=value1&param2=value2。
  • paramsSerializer —— params參數(shù)序列化器。
  • data —— data是在發(fā)送POST、PUT或者PATCH請求的數(shù)據(jù)對象。
  • timeout —— 請求超時設(shè)置,單位為毫秒
  • withCredentials —— 表明是否有跨域請求需要用到證書
  • adapter —— adapter允許用戶處理更易于測試的請求。返回一個Promise和一個有效的response
  • auth —— auth表明提供憑證用于完成http的身份驗(yàn)證。這將會在headers中設(shè)置一個Authorization授權(quán)信息。自定義Authorization授權(quán)要設(shè)置在headers中。
  • responseType —— 表示服務(wù)器將返回響應(yīng)的數(shù)據(jù)類型,有arraybuffer、blob、document、json、text、stream這6個類型,默認(rèn)是json類似數(shù)據(jù)。
  • xsrfCookieName —— 用作 xsrf token 值的 cookie 名稱
  • xsrfHeaderName —— 帶有 xsrf token 值 http head 名稱
  • onUploadProgress —— 允許在上傳過程中的做一些操作
  • onDownloadProgress —— 允許在下載過程中的做一些操作
  • maxContentLength —— 定義了接收到的response響應(yīng)數(shù)據(jù)的最大長度。
  • validateStatus —— validateStatus定義了根據(jù)HTTP響應(yīng)狀態(tài)碼決定是否接收或拒絕獲取到的promise。如果 validateStatus 返回 true (或設(shè)置為 null 或 undefined ),promise將被接收;否則,promise將被拒絕。
    maxRedirects —— maxRedirects定義了在node.js中redirect的最大值,如果設(shè)置為0,則沒有redirect。
  • httpAgent —— 定義在使用http請求時的代理
  • httpsAgent —— 定義在使用https請求時的代理
  • proxy —— proxy定義代理服務(wù)器的主機(jī)名和端口,auth
  • cancelToken —— cancelToken定義一個 cancel token 用于取消請求

我們發(fā)現(xiàn)有一個headers參數(shù),那么對上面的代碼修改:

 var vm = this
 this.$http.post(
 vm.testUrl,
 {"name":"痞子達(dá)"},
 {headers:{'Content-Type':'application/x-www-form-urlencoded'}})
 .then((response)=>{
         alert(response.data.msg);
})

加入{headers:{'Content-Type':'application/x-www-form-urlencoded'}}
但這個時候還是沒能夠正確彈框,因?yàn)槲覀儌鬟^去的是key字符串,并且vlue是沒有值的。

Paste_Image.png

后端打印出來是這樣的:

array(1) { ["{"name":"痞子達(dá)"}"]=> string(0) "" }

這必須獲取不到啊,那我們嘗試將其轉(zhuǎn)換為query參數(shù)。
引入Qs,這個庫是axios里面包含的,不需要再下載了。

import Qs from 'qs'
 var vm = this
var data = Qs.stringify({"name":"痞子達(dá)"});
 this.$http.post(vm.testUrl,data, {headers:{'Content-Type':'application/x-www-form-urlencoded'}}).then((response)=>{
     alert(response.data.msg);
})

再看:

Paste_Image.png

控制臺看看那form-data:

Paste_Image.png

這才是我們熟悉的樣子。

但是我們不能每次請求都寫一遍config,太麻煩了。
在入口文件main.js修改:

#創(chuàng)建一個axios實(shí)例
var axios_instance = axios.create({
#config里面有這個transformRquest,這個選項(xiàng)會在發(fā)送參數(shù)前進(jìn)行處理。
#這時候我們通過Qs.stringify轉(zhuǎn)換為表單查詢參數(shù)
    transformRequest: [function (data) {
        data = Qs.stringify(data);
        return data;
    }],
#設(shè)置Content-Type
    headers:{'Content-Type':'application/x-www-form-urlencoded'}
})
Vue.use(VueAxios, axios_instance)

ok,以后發(fā)起http請求,如下即可:

var vm = this
this.$http.post(vm.url,data).then((response)=>{
    alert(response.data.msg);
})

其他的用法和配置大家可以深入研究。

為什么放棄vue-resource,可以看這里:
https://github.com/vuefe/vuefe.github.io/issues/186

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,321評論 6 543
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,559評論 3 429
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,442評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,835評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,581評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,922評論 1 328
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,931評論 3 447
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 43,096評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,639評論 1 336
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,374評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,591評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,104評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,789評論 3 349
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,196評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,524評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,322評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,554評論 2 379

推薦閱讀更多精彩內(nèi)容