JS解決url傳值出現(xiàn)中文亂碼的另類辦法
在開發(fā)web應(yīng)用時,很多情況都需要進行前后臺的數(shù)據(jù)交互,有時候我們可能需要把前臺的中文數(shù)據(jù)通過URL的方式傳遞到后臺,但此時有個令人頭疼的問題,因為Java中網(wǎng)絡(luò)傳輸使用的標準字符集是ISO-8859-1,所以在后臺用request.getParameter("message");獲取前臺傳過來的中文時,得到的還是ISO-8859-1字符集,中文就會出現(xiàn)亂碼現(xiàn)象,好多人的解決辦法是在前臺傳遞中文之前進行decode,后臺再decode一下進行轉(zhuǎn)換,這樣感覺很是麻煩,難道就沒其他的方式解決嗎?
苦思冥想了一下:為什么用表單的方式就可以傳遞中文,而URL的方式就不行了呢?非得用URL傳值的方式才能解決問題嗎?這里我想到了動態(tài)表單,何不用它來解決呢,示例如下:
假設(shè)有如下應(yīng)用場景:KPI列表頁面中,對每個KPI都有生成預警數(shù)據(jù)的功能,當點擊列表中每個KPI生成數(shù)據(jù)的按鈕時,需要把KPI的id和name傳遞到后臺。
前端對應(yīng)的js方法:
用URL傳值的寫法:
function createData(indexId,indexName){
window.location.href="catalogAction.do?action=CreateIndexData&catalogId="+indexId+"&catalogName="+indexName+"&random="+Math.random();
}
用這種方法,由于KPI名稱大多為中文,在后臺接收到的值肯定為亂碼。
若用動態(tài)生成表單的方式就可以解決:
function createData(indexId,indexName){
var urlStr = "catalogAction.do?action=CreateIndexData&PcatalogId=<c:out value='${catalogId}'/>&catalogId="+indexId+"&random="+Math.random();
var f= document.createElement('form');
f.action = urlStr;
f.method = 'post';
document.body.appendChild(f);
var temp=document.createElement('input');
temp.type= 'hidden';
temp.value=indexName;
temp.name='catalogName';
f.appendChild(temp);
f.submit();
}
對中文字段用form的方式提交過去,不是中文的仍然用URL傳,這樣就輕松解決了向后臺傳遞中文出現(xiàn)亂碼的情況。
相關(guān)文章
深入理解基于vue-cli的webpack打包優(yōu)化實踐及探索
這篇文章主要介紹了基于vue-cli的webpack打包優(yōu)化實踐及探索,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-10-10
淺析JavaScript如何解決跨域問題并手寫一個jsonp
跨域是指瀏覽器為了安全性,實施的同源策略,同源策略要求,只有協(xié)議、域名和端口號完全相同的網(wǎng)頁,才能共享資源,本文整理了一些常用的跨域解決方法,希望對大家有所幫助2024-03-03
超全面的JavaScript開發(fā)規(guī)范(推薦)
作為一名開發(fā)人員(WEB前端JavaScript開發(fā)),不規(guī)范的開發(fā)不僅使日后代碼維護變的困難,同時也不利于團隊的合作,通常還會帶來代碼安全以及執(zhí)行效率上的問題。本文就主要介紹了關(guān)于Javascript的命名規(guī)范、注釋規(guī)范以及框架開發(fā)的一些問題,需要的朋友可以參考學習。2017-01-01

