隨著Web應(yīng)用的發(fā)展,越來越多的程序員需要使用get請求方式獲取數(shù)據(jù),而get請求方式的最大限制就是無法攜帶太多的參數(shù),因為它們通常會被瀏覽器或web服務(wù)器截斷或丟失。
為了解決這個問題,開發(fā)者選擇將數(shù)據(jù)封裝成一個json對象來進(jìn)行請求,這樣數(shù)據(jù)可以通過一個單一的字符串進(jìn)行傳輸,而不需要使用多個請求參數(shù)。不過,這也會帶來url字符串過長的問題。
// 將姓名和年齡放在json對象中傳輸 var jsonObj = { 'name': '張三', 'age': '23' }; // 通過ext屬性將json對象轉(zhuǎn)換成url字符串 var url = '/api/userinfo?ext=' + encodeURIComponent(JSON.stringify(jsonObj)); console.log(url); // 輸出/api/userinfo?ext=%7B%22name%22%3A%22%E5%BC%A0%E4%B8%89%22%2C%22age%22%3A%2223%22%7D
上面的代碼中,我們使用了encodeURIComponent方法對json對象進(jìn)行編碼,這樣會將一些特殊字符進(jìn)行轉(zhuǎn)義,比如“{}[]#&等。在web服務(wù)器端接收到請求時,需要使用外部庫將url字符串中的json數(shù)據(jù)解析出來,然后在進(jìn)行使用。