在開發web應用時,很多情況都需要進行前後台的數據交互,有時候我們可能需要把前台的中文數據通過URL的方式傳遞到後台,但此時有個令人頭疼的問題,因為Java中網絡傳輸使用的標准字符集是ISO-8859-1,所以在後台用request.getParameter("message");獲取前台傳過來的中文時,得到的還是ISO-8859-1字符集,中文就會出現亂碼現象,好多人的解決辦法是在前台傳遞中文之前進行decode,後台再decode一下進行轉換,這樣感覺很是麻煩,難道就沒其他的方式解決嗎?
苦思冥想了一下:為什麼用表單的方式就可以傳遞中文,而URL的方式就不行了呢?非得用URL傳值的方式才能解決問題嗎?這裡我想到了動態表單,何不用它來解決呢,示例如下:
假設有如下應用場景:KPI列表頁面中,對每個KPI都有生成預警數據的功能,當點擊列表中每個KPI生成數據的按鈕時,需要把KPI的id和name傳遞到後台。
前端對應的js方法:
用URL傳值的寫法:
復制代碼 代碼如下:
function createData(indexId,indexName){
window.location.href="catalogAction.do?action=CreateIndexData&catalogId="+indexId+"&catalogName="+indexName+"&random="+Math.random();
}
用這種方法,由於KPI名稱大多為中文,在後台接收到的值肯定為亂碼。
若用動態生成表單的方式就可以解決:
復制代碼 代碼如下:
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傳,這樣就輕松解決了向後台傳遞中文出現亂碼的情況。