最近有讀者問(wèn)到一個(gè)問(wèn)題,就是關(guān)于使用get請(qǐng)求時(shí)是否可以用json傳參。其實(shí),答案是可以的。
我們知道,get請(qǐng)求通常都是通過(guò)url傳參來(lái)實(shí)現(xiàn)的。例如:
http://www.example.com/test?name=Tom&age=18
這種方式的弊端是明顯的,就是參數(shù)暴露在了url中,會(huì)有一定的安全隱患,而且url長(zhǎng)度也有限制。
而使用json傳參則可以有效解決這些問(wèn)題。我們只需要將參數(shù)組裝成json格式,并將其轉(zhuǎn)為字符串,在請(qǐng)求時(shí)作為參數(shù)傳遞即可。例如:
http://www.example.com/test?params={"name":"Tom","age":18}
這樣的請(qǐng)求方式不僅更加安全,而且傳參也更加靈活,不受url長(zhǎng)度限制。
當(dāng)然,在服務(wù)端獲取參數(shù)時(shí),我們需要進(jìn)行一定的處理。通常情況下,我們可以使用url解碼和字符串轉(zhuǎn)json的方式來(lái)完成參數(shù)的解析。
// 獲取url參數(shù) function getUrlParams(){ var str = location.search.substring(1); var jsonStr = decodeURIComponent(str); return JSON.parse(jsonStr); } var params = getUrlParams(); console.log(params.name); console.log(params.age);
當(dāng)然,也有一些框架或庫(kù)可以幫助我們更方便地實(shí)現(xiàn)get請(qǐng)求時(shí)使用json傳參,例如axios庫(kù)中的paramsSerializer配置項(xiàng)。
import axios from 'axios'; import qs from 'querystring'; axios.get('/test', { params: { name: 'Tom', age: 18 }, paramsSerializer: function(params) { return qs.stringify(params, { indices: false }); } })
以上就是關(guān)于get請(qǐng)求可以用json傳參的一些介紹和示例,希望對(duì)讀者有所幫助。