用了好久的vue-resource,好像每一次使用的時候,都要去看一下上一次是怎么寫的,具體的語法過不了多久又忘記了,甚至不知道其中的原理,只知道一些簡單的使用,一會兒用ES6的語法,一會兒又用傳統(tǒng)的語法,為了改變這種不良的習慣,并理清vue-resource使用promise取數(shù)據(jù)的原理,今天把這一塊整理一下。
先來說說 vue-resource
vue-resource是Vue.js的一款插件,它可以通過XMLHttpRequest或JSONP發(fā)起請求并處理響應。也就是說,$.ajax能做的事情,vue-resource插件一樣也能做到,而且vue-resource的API更為簡潔。
vue-resource的優(yōu)勢和介紹,可以通過下面這個地址來了解。
Vue.js——vue-resource全攻略
vue-resource的API分別有以下這些:
我現(xiàn)在的工作中,常用的就是get和post。
引入vue-resource后,可以基于全局的Vue對象使用http,也可以基于某個Vue實例使用http。現(xiàn)在的項目中,基本上都是后者,因此在不同組件的beforeCreate或mounted鉤子中取。
// 基于全局Vue對象使用httpVue.http.get('/someUrl', [options]).then(successCallback, errorCallback);Vue.http.post('/someUrl', [body], [options]).then(successCallback, errorCallback);// 在一個Vue實例內(nèi)使用$httpthis.$http.get('/someUrl', [options]).then(successCallback, errorCallback);this.$http.post('/someUrl', [body], [options]).then(successCallback, errorCallback);在發(fā)送請求后,使用then方法來處理響應結果,then方法有兩個參數(shù),第一個參數(shù)是響應成功時的回調函數(shù),第二個參數(shù)是響應失敗時的回調函數(shù)。
vue-resource支持Promise API,Promise是ES6的特性,Promise的中文含義為“先知”,Promise對象用于異步計算。
再簡單介紹一下Promise對象
ES6原生提供了Promise對象。所謂Promise對象,就是代表了未來某個將要發(fā)生的事件(通常是一個異步操作)。它的好處在于,有了Promise對象,就可以將異步操作以同步操作的流程表達出來,避免了層層嵌套的回調函數(shù)。此外,Promise對象還提供了一整套完整的接口,使得可以更加容易地控制異步操作。Promise對象的概念的詳細解釋,請參考《JavaScript標準參考教程》。
ES6的Promise對象是一個構造函數(shù),用來生成Promise實例。下面是Promise對象的基本用法。
var promise = new Promise(function(resolve, reject) { if (/* 異步操作成功 */){ resolve(value); } else { reject(error); }});promise.then(function(value) { // success}, function(value) { // failure});下面我們來直接使用:
假如我們請求下面這個json文件:
// 請求成功{ "code": 0, "msg": "get member success", "content": { "plank_id": "1", "start_at": "1234567890", "status": "3", "members_num": 1, "members": [ { "id": "14", "name": "", "avatar": "", "status": "3" } ] }, "is_mobile_user": false, "jssdk": { "appId": "wxec4d172a4f73ee6f", "timestamp": "1490367697", "nonceStr": "58d534d1b536a", "signature": "d8d8ceb0f39ddeb3085fd197e5df5caddb1f1ba1" }}// 請求失敗{ "code": 1, "msg": "錯誤信息", "content": "", "is_mobile_user": true, "jssdk": { "appId": "wxec4d172a4f73ee6f", "timestamp": "1487750749", "nonceStr": "58ad465dd5ba5", "signature": "4aa01f5a89ce79ee4c53249e0cdb84800f841004" }}
新聞熱點
疑難解答
圖片精選