Vue-resource總結

Vue 實現(xiàn) Ajax請求 和跨域請求主要是通過插件vue-resource.js

引進

引進插件vue-resource.js的方式主要有以下三種:

  • 將插件vue-resource.js文件下載到本地秉撇,通過script引進墓贿。
  • 在網(wǎng)站http://www.bootcdn.cn/vue-resource/選擇插件版本,通過script引進娩梨。
  • 如果項目是通過 webpack 構建的,可以在項目文件中安裝插件,然后引進滤奈。實現(xiàn)如下:
// 安裝命令
npm install vue-resource --save
// 引進
import  VueResource  from 'vue-resource'

發(fā)送請求

實現(xiàn)發(fā)送請求的方式有兩種:

  • 全局方式:Vue.http.get(...)
  • Vue 實例內(nèi)部(放在 methods 內(nèi)):this.$http.get(...)

返回結果

發(fā)送請求后,響應返回的是 Promise 對象撩满。

// 全局
Vue.http.get(url).then(response => {
    ...     // response級請求后返回的對象
}).catch(function(err){
    ...
})

// 實例內(nèi)部
this.$http.get(url).then(response => {
    ...
}).catch(function(err){
    ...
})

上面例子蜒程,通過get方式向url請求數(shù)據(jù),然后將請求結果返回伺帘,返回結果是一個 Promise 對象昭躺。

相關參數(shù)

發(fā)送請求可以攜帶一些參數(shù),一個完整的請求語句如下:
this.$http.requestType(url, [body],[config]).then(successCallback, errorCallback)
或者
Vue.http.requestType(url, [body],[config]).then(successCallback, errorCallback)

requestType:請求類型

不同請求類型包含的參數(shù)不同伪嫁,請求的類型主要有:

  • get(url, [config])
  • head(url, [config])
  • delete(url, [config])
  • jsonp(url, [config])
  • post(url, [body], [config])
  • put(url, [body], [config])
  • patch(url, [body], [config])

參數(shù)選項

主要的參數(shù)選項有:

  • url:請求的地址领炫。
  • body:作為請求主體發(fā)送的數(shù)據(jù)。
  • header:請求的 HTTP 頭部张咳。
  • params:請求數(shù)據(jù)帝洪,是一個對象。
  • timeout:響應時間脚猾。
  • before:發(fā)送請求之前的回調(diào)函數(shù)葱峡。
  • uploadProgress:上傳事件的函數(shù)。
  • downloadProgress:下載事件的函數(shù)龙助。

響應返回對象

當請求成功后砰奕,會返回一個 Promise 對象。

這個對象中主要包含以下這些屬性:

  • url:響應的 URL 地址提鸟。
  • body:響應主體军援,主要類型有:Object/Blob/string。
  • Headers:響應頭部對象称勋。
  • ok:布爾值胸哥, 是否響應成功。
  • status:2 開頭表示請求成功铣缠,主要是 200~299烘嘱。
  • statusText:響應狀態(tài)的短語昆禽。

這個對象中主要包含以下這些方法:

  • text():類型是 Promise,將請求的 body 主體轉化為 string 類型蝇庭。
  • json():類型是 Promise醉鳖,將請求的 body 主體解析為 JSON 對象。
  • blob():類型是 Promise哮内,將請求的 body 主體轉化為 Blob 對象盗棵。主要是用于請求一些圖片的相關信息,如:圖片類型北发,大小等纹因。

例子(請求數(shù)據(jù)、請求圖片信息琳拨、jsonp 實現(xiàn)跨域請求)

實例 1(請求數(shù)據(jù))

需求:請求本地文件中的數(shù)據(jù)瞭恰,加載都頁面上。

主要代碼如下:

<div id="app">
    <button type="button" @click="ajaxRequest">button</button>
    <p v-for = "(value, key) of msg">{{ key }} ---- {{ value }}</p>
</div>

<script src="../vue.js"></script>
<script src="https://cdn.bootcss.com/vue-resource/1.5.0/vue-resource.min.js"></script>
<script>
    new Vue({
        el: "#app",
        data: {
            msg: {
                Url: '',
                Body: '',
                Status: '',
                StatusText: '',
            },
            url: './data.txt'
        },
        methods: {
            ajaxRequest: function () {
                this.$http.get(this.url)
                    .then(response => {
                        this.msg.Url = response.url     // 響應地址
                        this.msg.Body = response.body   // 響應主體
                        this.msg.Status = response.status  // 響應狀態(tài)
                        this.msg.StatusText = response.statusText   // 響應狀態(tài)短語
                    }).catch(function (err) {
                        alert("Error", err)
                    })
            }
        }
    })
</script>

效果如下:

例子1.gif

實例 2(請求圖片信息)

需求:請求圖片的相關數(shù)據(jù)狱庇,加載都頁面上惊畏。

具體代碼如下:

<div id="app">
    <button type="button" @click="ajaxFun">button</button>
    <img :src="img" alt="picture">
    <p v-for = "(value, key) of imgInfo">{{ key }} :: {{ value }}</p>
</div>

<script src="../vue.js"></script>
<script src="https://cdn.bootcss.com/vue-resource/1.5.0/vue-resource.min.js"></script>
<script>
    let app = new Vue({
        el: '#app',
        data: {
            iShow: true,
            msg: '',
            img: './rocket.jpg',
            imgInfo: {
                type: '',
                size: ''
            }
        },
        methods: {
            // 獲取圖片的信息
            ajaxFun: function () {
                this.$http.get(this.img, {
                    responseType: 'blob'
                }).then((response) => {
                    return response.blob() // 異步請求圖片的resolve狀態(tài)返回給blob
                }).then(blob => {   // blob處理
                    this.imgInfo.type = blob.type
                    this.imgInfo.size = blob.size
                }).catch(function (e) {     // 錯誤捕獲
                    alert(e)
                })
            }
        }
    })
</script>

效果如下:

例子2.gif

實例 3(jsonp 實現(xiàn)跨域請求)

需求:百度輸入框搜索:aurora,本地實現(xiàn)跨域請求數(shù)據(jù)密任。

  • 輸入 aurora
image1.png
  • 找到要跨域請求數(shù)據(jù)的鏈接
image2.png
  • 雙擊打開鏈接颜启,查看數(shù)據(jù)
image3.png
  • 實現(xiàn)代碼
<div id="app">
    <button type="button" @click="jsonpRequest">button</button>
    <p v-for="(value, key) of msg">
        {{ key }} :: {{ value }}
    </p>
</div>

<script src="../vue.js"></script>
<script src="https://cdn.bootcss.com/vue-resource/1.5.0/vue-resource.min.js"></script>
<script>
    function __jsonp21__(data) {
        console.log(data);
    }
    new Vue({
        el: '#app',
        data: {
            msg: {
                status: '',
                info: []
            }
        },
        methods: {
            jsonpRequest: function () {
                this.$http.jsonp(
                    'https://sp1.baidu.com/5b11fzupBgM18t7jm9iCKT-xh_/sensearch?wd=aurora&cb=bd_cb_dict3_1521617356074&callback=bd_cb_dict3_1521617356074&_=1521617355798', {
                        jsonp: 'cb' // 指定jsonp回調(diào)函數(shù)名稱
                    }
                ).then(response => {
                    console.log(response.body);
                    let res = response.body
                    this.msg.status = res.err_msg
                    this.msg.info = res.liju_result
                })
            }
        }
    })
</script>

注意:this.$http.jsonp()的第二個參數(shù){...}用于指定參數(shù)和回調(diào)函數(shù)的名稱。如果要傳遞參數(shù)給地址浪讳,則參數(shù)的具體形式為:params:{...}

image4.png

實現(xiàn)效果:


效果.gif
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末缰盏,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子淹遵,更是在濱河造成了極大的恐慌口猜,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件透揣,死亡現(xiàn)場離奇詭異暮的,居然都是意外死亡,警方通過查閱死者的電腦和手機淌实,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來猖腕,“玉大人拆祈,你說我怎么就攤上這事√雀校” “怎么了放坏?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長老玛。 經(jīng)常有香客問我淤年,道長钧敞,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任麸粮,我火速辦了婚禮溉苛,結果婚禮上,老公的妹妹穿的比我還像新娘弄诲。我一直安慰自己愚战,他們只是感情好,可當我...
    茶點故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布齐遵。 她就那樣靜靜地躺著寂玲,像睡著了一般。 火紅的嫁衣襯著肌膚如雪梗摇。 梳的紋絲不亂的頭發(fā)上拓哟,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天,我揣著相機與錄音伶授,去河邊找鬼断序。 笑死,一個胖子當著我的面吹牛谎砾,可吹牛的內(nèi)容都是我干的逢倍。 我是一名探鬼主播,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼景图,長吁一口氣:“原來是場噩夢啊……” “哼较雕!你這毒婦竟也來了?” 一聲冷哼從身側響起挚币,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤亮蒋,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后妆毕,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體慎玖,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年笛粘,在試婚紗的時候發(fā)現(xiàn)自己被綠了趁怔。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,133評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡薪前,死狀恐怖润努,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情示括,我是刑警寧澤铺浇,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站垛膝,受9級特大地震影響鳍侣,放射性物質(zhì)發(fā)生泄漏丁稀。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一倚聚、第九天 我趴在偏房一處隱蔽的房頂上張望线衫。 院中可真熱鬧,春花似錦秉沼、人聲如沸桶雀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽矗积。三九已至,卻和暖如春敞咧,著一層夾襖步出監(jiān)牢的瞬間棘捣,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工休建, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留乍恐,地道東北人。 一個月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓测砂,卻偏偏與公主長得像茵烈,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子砌些,可洞房花燭夜當晚...
    茶點故事閱讀 45,077評論 2 355

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

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理呜投,服務發(fā)現(xiàn),斷路器存璃,智...
    卡卡羅2017閱讀 134,672評論 18 139
  • $http 我們可以使用內(nèi)置的$http服務直接同外部進行通信仑荐。$http服務只是簡單的封裝了瀏覽器原生的XMLH...
    oWSQo閱讀 650評論 0 0
  • 由于公司前端人員短缺,這周我和濤哥就來填這個坑了纵东,前端使用的js框架是Vue+Vue-resource+Vue-v...
    郭之源閱讀 50,349評論 9 57
  • 小說作者:渚清沙 【一】 如果可以重新選擇粘招,辛四最想有一場中規(guī)中矩的傳統(tǒng)婚禮。 奈何她嫁人那日辦的是西式婚禮偎球,穿著...
    藝小創(chuàng)的聽說鋪子閱讀 992評論 3 13
  • 侯昱竹閱讀 380評論 0 1