首頁 > 軟體

vue處理get/post的http請求的範例

2022-03-01 10:00:30

一、使用Vue.http/this.$http

在發起請求的時候,為了減少作用域鏈的搜尋,建議使用一個區域性變數來接受this

1. GET請求

// 基於全域性Vue物件使用http
Vue.http.get('/someUrl', [options]).then(successCallback, errorCallback);

// 在一個Vue範例內使用$http
this.$http.get('/someUrl', [options]).then(successCallback, errorCallback);

範例

//不帶引數的get請求
this.$http.get('/someUrl').then(function(res){
    console.log('請求成功處理');   
},function(res){
    console.log('請求失敗處理');
});

//需要傳遞資料的get請求
this.$http.get('/someUrl',{param:jsonData}).then(function(res){
    console.log('請求成功處理');   
},function(res){
    console.log('請求失敗處理');
});

//ES6的Lambda寫法
this.$http.get('/someUrl', [options]).then((response) => {
	console.log('請求成功處理');
}, (response) => {
	console.log('請求失敗處理');
});

2.POST請求

post 傳送資料到後端,需要第三個引數 {emulateJSON:true}

emulateJSON 的作用: 如果Web伺服器無法處理編碼為 application/json 的請求,你可以啟用 emulateJSON 選項。啟用該選項後,請求會以application/x-www-form-urlencoded作為MIME type,就像普通的HTML表單一樣。

// 基於全域性Vue物件使用http
Vue.http.post('/someUrl', [body], [options]).then(successCallback, errorCallback);

// 在一個Vue範例內使用$http
this.$http.post('/someUrl', [body], [options]).then(successCallback, errorCallback);

範例

this.$http.post('/try/ajax/demo_test_post.php',{name:"菜鳥教學",url:"http://www.runoob.com"},{emulateJSON:true}).then(function(res){
    	document.write(res.body);    
	},function(res){
     	console.log(res.status);
	});

二、使用Vue.resource/this.$resource

vue-resource提供了另外一種方式存取HTTP——resource服務,resource服務包含以下幾種預設的action:

get: {method: 'GET'},
save: {method: 'POST'},
query: {method: 'GET'},
update: {method: 'PUT'},
remove: {method: 'DELETE'},
delete: {method: 'DELETE'}

存取resource物件的兩種方式

//全域性存取
Vue.resource
//範例存取
this.$resource

GET請求

//使用一個區域性變數來接受this
var vm = this;
this.$resource('apiUrl').get().then((response) => {
	console.log("呼叫成功");
	})
	.catch(function(response) {
	console.log("呼叫失敗");
	})
}

POST請求

使用save方法傳送POST請求

//使用一個區域性變數來接受this
var vm = this;
this.$resource('apiUrl').save('apiUrl',Target).then((response) => {
	console.log("呼叫成功");
	})
	.catch(function(response) {
	console.log("呼叫失敗");
	})
}

inteceptor – 在請求前和請求後附加行為

攔截器可以在請求傳送前和傳送請求後做一些處理

用法

//Lambda函數寫法
Vue.http.interceptors.push((request, next) => {
		// ...
		// 請求傳送前的處理邏輯
		// ...
	next((response) => {
		// ...
		// 請求傳送後的處理邏輯
		// ...
		// 根據請求的狀態,response引數會返回給successCallback或errorCallback
		return response
	})
})
//普通寫法
Vue.http.interceptors.push(function(request, next) {
	// ...
	// 請求傳送前的處理邏輯
	// ...
	next(function(response) {
		// ...
		// 請求傳送後的處理邏輯
		// ...
		// 根據請求的狀態,response引數會返回給successCallback或errorCallback
		return response
	})
})

範例 – 為所有的請求處理加一個loading

請求傳送前顯示loading,接收響應後隱藏loading或顯示指定的loading資訊;

新增loading.vue元件

<template id="loading-template">
	<div class="loading-overlay">
		<div class="sk-three-bounce">
			<div class="sk-child sk-bounce1"></div>
			<div class="sk-child sk-bounce2"></div>
			<div class="sk-child sk-bounce3"></div>
		</div>
	</div>
</template>

在父元件中引入loading元件

<template>
	<div class="father">
		//loading 發起請求時顯示
		<loading v-show="showLoading"</loading>
		//modal-dialog 請求失敗時顯示
		<modal-dialog :show="showDialog">
		<header class="dialog-header" slot="header">
			<h1 class="dialog-title">Server Error</h1>
		</header>
		<div class="dialog-body" slot="body">
			<p class="error">Oops,server has got some errors, error code: {{errorCode}}.</p>
		</div>
	</modal-dialog>
	</div>
</template>

在父元件中新增inteceptor

data: {
		showLoading: false,
		showDialog: false,
		errorCode: ''
},
//在生命週期中新增inteceptor
Vue.http.interceptors.push((request, next) => {
	help.showLoading = true
	next((response) => {
		if(!response.ok){
			help.errorCode = response.status
			help.showDialog = true
		}
		help.showLoading = false
		return response
	});
});

拓展

vue-resource 提供了 7 種請求 API(REST 風格):

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

除了 jsonp 以外,另外 6 種的 API 名稱是標準的 HTTP 方法。其中,options引數說明如下:

可以通過如下屬性和方法處理一個請求獲取到的響應物件:

參考文章

菜鳥教學

完整程式碼範例及其他請求方法的使用

程式碼是參考上面兩篇文章寫出來的,沒有實際執行過;且只記錄了GET/POST兩種請求方式,其它請求方式以及完整程式碼需要參考第二篇文章

到此這篇關於vue處理get/post的http請求的範例的文章就介紹到這了,更多相關vue get/post的http請求內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com