Ajax送信時の中国語文字化け問題の解決

韦小宝
リリース: 2018-01-13 11:42:58
オリジナル
1365 人が閲覧しました

この記事は主に、中国語の文字化けのAjax送信の問題の解決策に関する関連情報を紹介しています。非常に優れており、ajaxに興味のある友人はこの記事を参照してください

AJAX の概要

AJAX = 非同期 JavaScript および XML (非同期 JavaScript および XML)。

AJAX は新しい プログラミング言語 ではなく、既存の標準を使用する新しい方法です。

AJAX は、サーバーとデータを交換し、ページ全体をリロードせずに Web ページの一部を更新する技術です。

ajax送信の中国語文字化け問題の説明:

JSPページに保存ボタンがあり、クリックするとsaveForm()のjs関数がトリガーされ、saveFormを通過します。 () 関数。検証後、データリクエストは 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 、そうでないと投稿が中国語で文字化けします

解決策:

送信時にデータを再エンコードし、データの受信時に再デコードできます。実際、コード化けの問題は、エンコード形式の競合により、デコードされたキー ペアに以前の形式解析エラーが発生し、その結果、コード化けが発生することです。送信中に、送信する必要がある中国語データの前に encodeURI() エンコーディングを追加します。例: encodeURI(j$("#fk_info").val()); の前に java.net.URLDecoder を追加します。受信する必要がある中国語データ。decode(value, "UTF-8")。例:
String fk_bank_name = Utility.trimNull(request.getParameter("fk_bank_name")); (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());
}
%>
ログイン後にコピー

JSP ページではなくデータを受け入れる場合、Java クラスの場合は、URLDecoder.decode(value, "UTF-8"); をデコードして、対応するパッケージをインポートするだけで済みます。送信中に encodeURI(encodeURI(j$("#fk_info").val())) を 2 回エンコードする必要がある場合もあります。その具体的な理由は、request.getParameter() を通じてデータを取得するときにデコードを実行するためです。デコード時間は変わりません。

関連する推奨事項:

AJAX アプリケーションで重要な知識ポイントをマスターする必要がある

登録機能を実装するための ajax メソッド

Ajax と PHP を組み合わせてセカンダリ リンケージ インスタンス メソッドを実現する

以上がAjax送信時の中国語文字化け問題の解決の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート