JS解決url傳值出現中文亂碼的另類辦法_javascript技巧

來源:互聯網
上載者:User

 在開發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傳,這樣就輕鬆解決了向後台傳遞中文出現亂碼的情況。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.