>  기사  >  웹 프론트엔드  >  중국어 왜곡 문자의 Ajax 전송 문제 해결

중국어 왜곡 문자의 Ajax 전송 문제 해결

韦小宝
韦小宝원래의
2018-01-13 11:42:581333검색

이 글은 중국어 잘못된 문자의 Ajax 전송 문제에 대한 해결 방법에 대한 정보를 주로 소개합니다. Ajax에 관심이 있는 친구들은 참고할 가치가 매우 높습니다.

AJAX 소개

AJAX = 비동기

JavaScript 및 XML(비동기 JavaScript 및 XML).

AJAX는 새로운

프로그래밍 언어가 아니라 기존 표준을 사용하는 새로운 방식입니다.

AJAX는 전체 페이지를 다시 로드하지 않고도 서버와 데이터를 교환하고 웹 페이지의 일부를 업데이트하는 기술입니다.

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")) 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());
}
%>

데이터가 승인되고 jsp 페이지가 아닌 경우 Java 클래스인 경우 URLDecoder.decode(value, "UTF-8")만 있으면 해당 패키지를 디코딩하고 가져올 수 있습니다. 전송 중에 encodeURI(encodeURI(j$("#fk_info").val()))를 두 번 인코딩해야 할 수도 있습니다. 구체적인 이유는 request.getParameter()를 통해 데이터를 얻을 때 디코딩을 수행하기 때문입니다. 디코딩 시간은 변경되지 않습니다.


관련 추천:

AJAX 애플리케이션에서 숙지해야 할 중요 지식

등록 기능을 구현하는 ajax 방법

Ajax와 PHP를 결합하여 보조 연결 인스턴스 방법을 구현함

위 내용은 중국어 왜곡 문자의 Ajax 전송 문제 해결의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.