當(dāng)我們使用Vue進(jìn)行前端開發(fā)的時(shí)候,常常需要向后臺(tái)發(fā)送HTTP請求。這時(shí)候就會(huì)用到Vue的$http模塊,其中的post方法可以向后臺(tái)發(fā)送數(shù)據(jù)。而有時(shí)候,我們需要向后臺(tái)發(fā)送多種參數(shù),而不是單一的參數(shù)。這時(shí)候,我們需要使用Vue post多參數(shù)的方法。
this.$http.post('url', {data1: 'value1', data2: 'value2', data3: 'value3'}) .then(response =>{ console.log(response); }, error =>{ console.log(error); });
上述的代碼中,url是我們需要向哪個(gè)地址發(fā)送請求,而data1、data2和data3則是我們需要向后臺(tái)發(fā)送的多種參數(shù)。當(dāng)然,我們也可以使用數(shù)組來表示多個(gè)參數(shù):
this.$http.post('url', [data1, data2, data3]) .then(response =>{ console.log(response); }, error =>{ console.log(error); });
這時(shí)候我們就需要在后臺(tái)進(jìn)行特殊的處理,將數(shù)組中的值拆分為多個(gè)單獨(dú)的參數(shù)。在jQuery中,可以使用$.ajax方法中的Traditional參數(shù)來實(shí)現(xiàn)這一點(diǎn)。但在Vue中,沒有這樣的參數(shù)。我們需要自己寫一個(gè)處理函數(shù)來將數(shù)組轉(zhuǎn)換為多個(gè)單一的參數(shù):
function serializeParams(params) { if (!params || Object.keys(params).length === 0) return ''; let result = ''; for (let key in params) { if (Array.isArray(params[key])) { params[key].forEach(item =>{ result += `${key}=${item}&`; }); } else { result += `${key}=${params[key]}&`; } } return result.slice(0, -1); // 去掉最后一個(gè)& } const data = {data1: 'value1', data2: ['value2-1', 'value2-2'], data3: 'value3'}; const params = serializeParams(data); this.$http.post('url', params, {headers: {'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'}}) .then(response =>{ console.log(response); }, error =>{ console.log(error); });
可以看到,我們編寫的serializeParams函數(shù)可以將多個(gè)參數(shù)轉(zhuǎn)換為單一的參數(shù),并且加上了適當(dāng)?shù)姆指舴T诎l(fā)送請求的時(shí)候,我們也需要在HTTP頭中設(shè)置Content-Type為application/x-www-form-urlencoded,以確保后臺(tái)正確地處理請求。
總結(jié)一下,Vue post多參數(shù)有幾種實(shí)現(xiàn)方法。我們可以將多個(gè)參數(shù)傳入對象中,也可以傳入數(shù)組中。但如果需要使用數(shù)組,則需要在后臺(tái)進(jìn)行特殊處理。為了簡化這一步驟,我們可以編寫自己的處理函數(shù),將多個(gè)參數(shù)轉(zhuǎn)換為單一的參數(shù)。同時(shí),我們在發(fā)送請求的時(shí)候也需要注意將HTTP頭中的Content-Type設(shè)置為正確的值,以確保后臺(tái)正確處理請求。