Ajax傳輸中文亂碼問題的解決方法
這篇文章主要介紹了Ajax傳輸中文亂碼問題的解決辦法的相關資料,非常不錯,具有參考和學習ajax的價值,對ajax感興趣的朋友可以參考下本篇文章
AJAX = Asynchronous JavaScript and XML(非同步的JavaScript 和XML )。
AJAX 不是新的程式語言,而是一種使用現有標準的新方法。
AJAX 是與伺服器交換資料並更新部分網頁的藝術,在不重新載入整個頁面的情況下。
ajax傳送中文亂碼問題描述:
我是在一個jsp頁面有一個儲存按鈕,點擊時會觸發saveForm()的js函數,在saveForm()函數裡經過校驗後,會透過ajax發送資料請求,這樣就不用透過提交表單來傳輸資料了,ajax估計就是這樣的好處吧,目前對ajax還不太熟悉。
ajax傳輸亂碼時的程式碼:
function saveForm(){ if(document.theformadd.onsubmit()){ disableAllBtn(true); j$.ajax({ type:"get", url:"add_form_do.jsp", data:{ problem_id : j$("#problem_id").val(), product_id : "<%=product_id%>", productId : j$("#productId").val(), depart_id : j$("#depart_id").val(), fk_busi_id : j$("#fk_busi_id").val(), fk_type : j$("#fk_type").val(), fk_source : j$("#fk_source").val(), fk_info : j$("#fk_info").val(), fk_name : j$("#fk_name").val(), fk_bank_name : j$("#fk_bank_name").val(), fk_bank_acct : j$("#fk_bank_acct").val(), sk_name : j$("#sk_name").val(), sk_bank_name : j$("#sk_bank_name").val(), sk_bank_acct : j$("#sk_bank_acct").val(), fk_money : j$("#fk_money").val(), fk_summary : j$("#fk_summary").val(), fk_date : j$("#fk_date").val(), input_man : "<%=input_operatorCode%>" }, success:function(ret){ if(ret == 1) { sl_alert("保存成功!"); }else{ sl_alert(ret); } window.returnValue=true; window.close(); } }); } }
然後我們在add_form_do.jsp中取得數據
<%@ page contentType="text/html; charset=GBK" import="java.math.*,com.enfo.intrust.intrust.vo.*,java.io.*, com.enfo.intrust.web.*,java.util.*,com.enfo.intrust.dao.*,com.enfo.intrust.intrust.*,com.enfo.intrust.tools.*,com.enfo.intrust.project.*" %> <script type="text/javascript" src="<%=request.getContextPath()%>/ext2.0/ext-base.js"></script> <script type="text/javascript" src="<%=request.getContextPath()%>/ext2.0/ext-all.js"></script> <%@ include file="/includes/operator.inc" %> <% try{ product_id = Utility.parseInt(Utility.trimNull(request.getParameter("product_id")),product_id); UnpostwarrantLocal local = EJBFactory.getUnpostwarrant(); Integer problem_id = Utility.parseInt(request.getParameter("problem_id"),new Integer(0)); Integer depart_id = Utility.parseInt(request.getParameter("depart_id"),new Integer(0)); //部门 Integer productId = Utility.parseInt(Utility.trimNull(request.getParameter("productId")),product_id); String fk_busi_id = Utility.trimNull(request.getParameter("fk_busi_id")); //字典1206 费用 String fk_type = Utility.trimNull(request.getParameter("fk_type")); //付款方式 2103 String fk_source = Utility.trimNull(request.getParameter("fk_source")); //付款依据 2104 String fk_info = Utility.trimNull(request.getParameter("fk_info")); //票据号码 String fk_name = Utility.trimNull(request.getParameter("fk_name")); //付款单位 String fk_bank_name = Utility.trimNull(request.getParameter("fk_bank_name")); //付款银行名称 String fk_bank_acct = Utility.trimNull(request.getParameter("fk_bank_acct")); //付款银行账号 String sk_name = Utility.trimNull(request.getParameter("sk_name")); //收款单位 String sk_bank_name = Utility.trimNull(request.getParameter("sk_bank_name")); //收款银行名称 String sk_bank_acct = Utility.trimNull(request.getParameter("sk_bank_acct")); //收款银行账号 BigDecimal fk_money = Utility.parseDecimal(Utility.trimNull(request.getParameter("fk_money")).replaceAll(",",""),new BigDecimal(0)); //金额 String fk_summary = Utility.trimNull(request.getParameter("fk_summary")); //备注 Integer fk_date = Utility.parseInt(request.getParameter("fk_date"),new Integer(Utility.getCurrentDate())); //要求付款日期 local.setProblem_id(problem_id); //local.setProduct_id(product_id); local.setProduct_id(productId); local.setDepart_id(depart_id); local.setFk_busi_id(fk_busi_id); local.setFk_type(fk_type); local.setFk_source(fk_source); local.setFk_info(fk_info); local.setFk_name(fk_name); local.setFk_bank_name(fk_bank_name); local.setFk_bank_acct(fk_bank_acct); local.setSk_name(sk_name); local.setSk_bank_name(sk_bank_name); local.setSk_bank_acct(sk_bank_acct); local.setFk_money(fk_money); local.setFk_summary(fk_summary); local.setFk_date(fk_date); local.setInput_man(input_operatorCode); local.addFinacialcardInfoGuotou(); out.clear(); response.getWriter().write("1"); }catch(Exception e){ out.clear(); response.getWriter().write(e.getMessage()); } %>
這時候我接受到的資料會是中文亂碼,不管傳輸方式是get,還是post都會中文亂碼
解決方案:
我們可以在傳輸時對資料重新編碼,然後在接受資料時重新解碼。其實亂碼的問題就是編碼格式衝突,導致解碼的金鑰對之前格式解析錯誤,導致亂碼。傳輸時,在需要傳送中文資料前面加上一個encodeURI()編碼,例如:encodeURI(j$("#fk_info").val());在接受需要中文資料的前面加上一個java.net.URLDecoder. decode(value, "UTF-8"),例如
String fk_bank_name = Utility.trimNull(request.getParameter("fk_bank_name")); String trans = java.net.URLDecoder.decode(fk_bank_name, "UTF-8" );
具體修改後的全部程式碼如下:
##修正後ajax傳送的程式碼:
function saveForm(){ if(document.theformadd.onsubmit()){ disableAllBtn(true); j$.ajax({ type:"get", url:"add_form_do.jsp", data:{ problem_id : j$("#problem_id").val(), product_id : "<%=product_id%>", productId : j$("#productId").val(), depart_id : j$("#depart_id").val(), fk_busi_id : j$("#fk_busi_id").val(), fk_type : j$("#fk_type").val(), fk_source : j$("#fk_source").val(), fk_info : encodeURI(j$("#fk_info").val()), fk_name : encodeURI(j$("#fk_name").val()), fk_bank_name : encodeURI(j$("#fk_bank_name").val()), fk_bank_acct : encodeURI(j$("#fk_bank_acct").val()), sk_name : encodeURI(j$("#sk_name").val()), sk_bank_name : encodeURI(j$("#sk_bank_name").val()), sk_bank_acct : encodeURI(j$("#sk_bank_acct").val()), fk_money : j$("#fk_money").val(), fk_summary : encodeURI(j$("#fk_summary").val()), fk_date : j$("#fk_date").val(), input_man : "<%=input_operatorCode%>" }, success:function(ret){ if(ret == 1) { sl_alert("保存成功!"); }else{ sl_alert(ret); } window.returnValue=true; window.close(); } }); } }
修正後add_form_do.jsp中取得資料:
<%@ page contentType="text/html; charset=GBK" import="java.math.*,com.enfo.intrust.intrust.vo.*,java.io.*, com.enfo.intrust.web.*,java.util.*,com.enfo.intrust.dao.*,com.enfo.intrust.intrust.*,com.enfo.intrust.tools.*,com.enfo.intrust.project.*" %> <script type="text/javascript" src="<%=request.getContextPath()%>/ext2.0/ext-base.js"></script> <script type="text/javascript" src="<%=request.getContextPath()%>/ext2.0/ext-all.js"></script> <%@ include file="/includes/operator.inc" %> <% try{ product_id = Utility.parseInt(Utility.trimNull(request.getParameter("product_id")),product_id); UnpostwarrantLocal local = EJBFactory.getUnpostwarrant(); Integer problem_id = Utility.parseInt(request.getParameter("problem_id"),new Integer(0)); Integer depart_id = Utility.parseInt(request.getParameter("depart_id"),new Integer(0)); //部门 Integer productId = Utility.parseInt(Utility.trimNull(request.getParameter("productId")),product_id); String fk_busi_id = Utility.trimNull(request.getParameter("fk_busi_id")); //字典1206 费用 String fk_type = Utility.trimNull(request.getParameter("fk_type")); //付款方式 2103 String fk_source = Utility.trimNull(request.getParameter("fk_source")); //付款依据 2104 String fk_info = Utility.trimNull(request.getParameter("fk_info")); //票据号码 String fk_name = Utility.trimNull(request.getParameter("fk_name")); //付款单位 String fk_bank_name = Utility.trimNull(request.getParameter("fk_bank_name")); //付款银行名称 String fk_bank_acct = Utility.trimNull(request.getParameter("fk_bank_acct")); //付款银行账号 String sk_name = Utility.trimNull(request.getParameter("sk_name")); //收款单位 String sk_bank_name = Utility.trimNull(request.getParameter("sk_bank_name")); //收款银行名称 String sk_bank_acct = Utility.trimNull(request.getParameter("sk_bank_acct")); //收款银行账号 BigDecimal fk_money = Utility.parseDecimal(Utility.trimNull(request.getParameter("fk_money")).replaceAll(",",""),new BigDecimal(0)); //金额 String fk_summary = Utility.trimNull(request.getParameter("fk_summary")); //备注 Integer fk_date = Utility.parseInt(request.getParameter("fk_date"),new Integer(Utility.getCurrentDate())); //要求付款日期 local.setProblem_id(problem_id); //local.setProduct_id(product_id); local.setProduct_id(productId); local.setDepart_id(depart_id); local.setFk_busi_id(fk_busi_id); local.setFk_type(fk_type); local.setFk_source(fk_source); local.setFk_info(java.net.URLDecoder.decode(fk_info, "UTF-8")); local.setFk_name(java.net.URLDecoder.decode(fk_name, "UTF-8")); local.setFk_bank_name(java.net.URLDecoder.decode(fk_bank_name, "UTF-8")); local.setFk_bank_acct(java.net.URLDecoder.decode(fk_bank_acct, "UTF-8")); local.setSk_name(java.net.URLDecoder.decode(sk_name, "UTF-8")); local.setSk_bank_name(java.net.URLDecoder.decode(sk_bank_name, "UTF-8")); local.setSk_bank_acct(java.net.URLDecoder.decode(sk_bank_acct, "UTF-8")); local.setFk_money(fk_money); local.setFk_summary(java.net.URLDecoder.decode(fk_summary, "UTF-8")); local.setFk_date(fk_date); local.setInput_man(input_operatorCode); local.addFinacialcardInfoGuotou(); out.clear(); response.getWriter().write("1"); }catch(Exception e){ out.clear(); response.getWriter().write(e.getMessage()); } %>
以上是Ajax傳輸中文亂碼問題的解決方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Linux中文亂碼問題是使用中文字元集和編碼時常見的一個問題。出現亂碼的原因可能是檔案編碼設定不正確,系統語言環境未安裝或未設置,以及終端顯示設定錯誤等。本文將介紹幾種常見的解決方法,並提供具體的程式碼範例。一、檢查檔案編碼設定使用file指令查看檔案編碼在終端機中使用file指令,可以檢視檔案的編碼:file-ifilename如果輸出中有"charset

使用PHP和Ajax建置自動完成建議引擎:伺服器端腳本:處理Ajax請求並傳回建議(autocomplete.php)。客戶端腳本:發送Ajax請求並顯示建議(autocomplete.js)。實戰案例:在HTML頁面中包含腳本並指定search-input元素識別碼。

PHP中文檔案名稱亂碼問題處理技巧在開發過程中,常常會遇到處理中文檔案名稱亂碼的問題,尤其是在處理使用者上傳的檔案時。在PHP中,如何正確處理檔案名稱亂碼是比較常見且重要的問題。本文將介紹一些處理中文檔案名稱亂碼問題的技巧,並提供具體的程式碼範例,幫助讀者更好地應對這個挑戰。問題描述當使用者上傳檔案時,有時會出現中文檔案名稱亂碼的狀況。這是因為不同的作業系統和瀏覽器對

標題:解決Oracle導入中文資料亂碼問題的方法及代碼範例在Oracle資料庫中導入中文資料時,經常會出現亂碼的情況,這可能是由於資料庫字元集設定不正確或導入過程中出現編碼轉換問題所致。為了解決這個問題,我們可以採取一些方法來確保導入的中文資料能夠正確顯示。以下是一些解決方案及具體的程式碼範例:一、檢查資料庫字元集設定在Oracle資料庫中,字元集的設定對於

標題:解決jQueryAJAX請求出現403錯誤的方法及程式碼範例403錯誤是指伺服器禁止存取資源的請求,通常會導致出現這個錯誤的原因是請求缺少權限或被伺服器拒絕。在進行jQueryAJAX請求時,有時會遇到這種情況,本文將介紹如何解決這個問題,並提供程式碼範例。解決方法:檢查權限:首先要確保請求的URL位址是正確的,同時驗證是否有足夠的權限來存取該資

jQuery是一個受歡迎的JavaScript函式庫,用來簡化客戶端端的開發。而AJAX則是在不重新載入整個網頁的情況下,透過發送非同步請求和與伺服器互動的技術。然而在使用jQuery進行AJAX請求時,有時會遇到403錯誤。 403錯誤通常是伺服器禁止存取的錯誤,可能是由於安全性原則或權限問題導致的。在本文中,我們將討論如何解決jQueryAJAX請求遭遇403錯誤

很多的使用者在升級完win11系統後發現遇到了個人軟體出現了亂碼的狀況,那麼這件事情要怎麼解決?以下就讓小編來為用戶們來仔細的介紹一下win11部分軟體亂碼問題解析吧。 win11部分軟體亂碼問題解析1、點選左下角工作列中的搜尋框,輸入控制面板開啟。 3.再點選其中的區域。 5.然後將視窗中的beta版小方框取消勾選,最後將電腦重新啟動即可解決問題。

Linux終端機亂碼問題的處理方法在使用Linux系統時,有時在終端機中顯示的文字會出現亂碼,這給我們使用終端機帶來了不便,需要及時處理。本文將為大家介紹一些常見的Linux終端機亂碼問題的處理方法,同時提供具體的程式碼範例。問題一:終端中文亂碼終端中文亂碼通常是因為終端的字元編碼設定不正確所導致的。我們可以透過修改終端機的字元編碼設定來解決這個問題。 #查看目前終端的
