> 웹 프론트엔드 > JS 튜토리얼 > jquery의 ajax() function_jquery에 의해 전달된 중국어 왜곡 값에 대한 솔루션 소개

jquery의 ajax() function_jquery에 의해 전달된 중국어 왜곡 값에 대한 솔루션 소개

WBOY
풀어 주다: 2016-05-16 17:48:32
원래의
1090명이 탐색했습니다.
코드 복사 코드는 다음과 같습니다.

$.ajax({
  dataType: 'json ',type : 'POST',url : 'http://localhost/test/test.do',data : {id: 1, type: 'Product'},success : function(data){ } } ); 🎜>

문제: 백그라운드 액션 프로그램을 제출할 때 얻은 유형이 깨집니다.

해결 방법:
방법 1: 이전에 사용 제출물 encodeURI는 두 번 인코딩됩니다. 두 번 인코딩해야 합니다

1. 다음 코드를 수정하세요
코드 복사 코드는 다음과 같습니다.
data:{id:1, type:encodeURI(encodeURI('product'))}


2 .백그라운드 작업에서 얻은 문자열을 디코딩하려면
1. String type = request.getParameter(“type”)
2. type = URLDecoder.decode(type, “UTF-8″);
방법 2: Ajax는 contentType 속성을 구성하고 charset=UTF-8을 추가합니다.
ajax 메서드에 다음 매개변수를 추가합니다.
contentType: “application/x-www-form-urlencoded=UTF-8; ″ 다른 것을 사용하세요. js 프레임워크나 xhr은 거의 동일합니다.
여기서 핵심은 charset=UTF-8입니다. 기본적으로 jQuery에서는 contentType이 작동하지 않습니다.


1. 테스트 환경 jQuery:1.3.2
tomcat:5.5.17

2. >1. get 메소드 사용서버 터미널 java 코드:


코드 복사 코드는 다음과 같습니다. 문자열 이름 = new String(request.getParameter("name").getBytes("iso8859-1"),"utf-8")

클라이언트 js 코드:


코드 복사 코드는 다음과 같습니다. $.ajax({url: "2. jsp",type: "get",data: {name:" Chinese"},success: function(response){
alert(response);
}});



결과: 올바른 표시


코드 복사 코드는 다음과 같습니다. $.ajax({url: "2.jsp",type: "get ",data: "name=中文",success: function(response){
alert(response);
}});



결과: 문자 깨짐


코드 복사 코드는 다음과 같습니다 : $.get("2.jsp", { 이름: "중국어" },function(응답){
alert(응답);
});


결과: 올바른 표시


코드 복사
코드는 다음과 같습니다. $.get("2.jsp", "name=中文",function( response){ alert(response);
})



결과: 잘못된 코드

2.post 방법

서버측 Java 코드:

코드 복사
코드는 다음과 같습니다. request.setCharacterEncoding("UTF-8") 문자열 이름 = request.getParameter("name");


클라이언트 js 코드:


코드 복사
코드는 다음과 같습니다. $.ajax({url: "3.jsp", type: "post",data: "method=testAjaxPost&name=中文",success: function(response){ alert(response);
}})



결과: 올바르게 표시됨

코드 복사


결과: 올바르게 표시됨


코드 복사
코드는 다음과 같습니다.

$.post("3.jsp", { 이름: "中文" },function(응답){
alert(응답);
})

결과: 올바르게 표시됨
코드 복사 코드는 다음과 같습니다.

$.post("3.jsp", "name=中文",function(response){
alert(response);
})

결과: 올바른 표시
3. 필터 사용
코드 복사 코드는 다음과 같습니다. 다음과 같습니다:

public void doFilter(ServletRequest 요청, ServletResponse 응답,
FilterChain 체인) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest)
if (req; .getHeader("X-Requested -With") != null && req.getHeader("X-Requested-With").equalsIgnoreCase("XMLHttpRequest")) {
request.setCharacterEncoding("utf-8");
} else {
request.setCharacterEncoding("gbk");
}
chain.doFilter(request, response)
}

jQuery는 ajax Add X-Requested-With를 사용할 때 헤더의 값은 XMLHttpRequest입니다. 필터가 jQuery의 ajax 요청이라고 판단하면 문자 인코딩이 utf8로 설정되어 제출 후 중국어 문제를 해결할 수 있습니다. request.setCharacterEncoding(( "UTF-8");을 설정할 필요가 없습니다.
get 메소드의 중국어 문자 깨짐 문제에 대해서는 중국어를 제출할 때 get 메소드를 사용하지 않고 게시하는 것을 권장합니다. 대신 ^-^

prototype.js가 중국어를 처리하는 방식과 일관성을 유지하려면 다음 방법을 사용하여
코드 복사 코드는 다음과 같습니다.
$.ajax({
url: "3.jsp",
유형: "post",
data: {name:"中文"},
beforeSend: function(XMLHttpRequest){
XMLHttpRequest.setRequestHeader("RequestType", "ajax")
alert( "시작");
},
성공: function(data, textStatus){
alert(data)
},
error: function(XMLHttpRequest, textStatus, errorThrown) 🎜>alert("오류: " textStatus);
},
complete: function(XMLHttpRequest, textStatus){
alert("Complete:" textStatus)
}
});


필터 코드는 다음과 같습니다.

코드 복사 코드
public void doFilter(ServletRequest 요청, ServletResponse 응답,
FilterChain 체인) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) 요청; req.getHeader("RequestType") != null && req.getHeader("RequestType").equalsIgnoreCase("ajax"))) {
request.setCharacterEncoding ("utf-8")
} else {
request.setCharacterEncoding("gbk");
}
chain.doFilter(요청, 응답)

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿