1. $.ajax を使用した中国語文字化けの解決策:
var _realname = $("input[name ='_searchName ']").val();
var termcourseId = '<%=termid%>';
var classId = '<%=classid%>';
var url = " /addressbook/studentListNoPage.do";
//var dataUrl = "formMap.TERMCOURSE_ID=" termcourseId "&formMap.CLASS_ID=" classId "&formMap.IS_ONLINE=all&formMap.REALNAME=" _realname; ajax({
type: "POST",
url: url,
dataType: "json",
data: {
termcourse "formMap.TERMCOURSE_ID": Id,
" formMap.CLASS_ID" :classId,
"formMap.IS_ONLINE":"all",
"formMap.REALNAME":encodeURI(_realname)
" -www-form-urlencoded; ,
success: function(data){
data = eval(data);
のうち、 dataUrl の & メソッドでは、フロントエンドが中国語のトランスコードに encodeURI または encodeURIComponent またはエスケープを使用するかどうかに関係なく、Action に送信されたコードは文字化けし、漢字の変換後の望ましいエンコーディングではありません。 contentType を追加しても機能しません。
dataUrl の送信方法 & を data:{name:value} の送信方法に変更します。
アクションで URLDecoder.decode(realname, "UTF-8") を使用してトランスコードし、中国語に変換します。 UTF-8 が使用されるのは、Jquery の送信メソッドがデフォルトで UTF-8 に設定されているためです。contentType の文字セットが GBK など、他のものに変更され、バックグラウンドで UTF-8 が GBK に変更されても、正しく変換できません。
jQuery の ajax コードが文字化けする問題の解決策
1. テスト環境
jQuery:1.3.2
tomcat:5.5.172. get メソッドを使用します
server ターミナル 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" 、タイプ: "get"、データ: "name = Chinese"、成功: function(response){alert(response);}});結果: 文字化けしたコード
コードをコピー
コードは次のとおりです。
$.get("2.jsp" 、{ 名前: "中国語" },function(response){alert(response);});
結果: 正しく表示されました
$。 get(" 2.jsp", "name=中文",function(response){
alert(response);
});
結果: 文字化けしたコード
2.post メソッド
サーバー側 Java コード:
request.setCharacterEncoding("UTF-8");
文字列名 = request.getParameter("name");
クライアント JS コード:
$.ajax({url: "3.jsp",タイプ: "post"、データ: "method=testAjaxPost&name=中文"、成功: function(response){
alert(response);
}});
結果:
$.ajax({url: "3.jsp"、タイプ: "post "、データ: {name:"中文"}、成功: function(response){
alert(response);
}});
結果: 正しい表示
$。 post("3.jsp", { name: "中国語 " },function(response){
alert(response);
});
結果: 正しく表示されました
$.post("3.jsp", "name=中文",function(response){
alert(response ; >
コードは次のとおりです:
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain チェーン) が IOException、ServletException をスローする {
HttpServletRequest req = (HttpServletRequest) request;
if (req.getHeader("X-Requested-With") != null && req.getHeader("X-Requested-With) ").equalsIgnoreCase("XMLHttpRequest")) {
jQuery が ajax を使用する場合、値は次のとおりです: XMLHttpRequest。これはjQueryのajaxリクエストであり、文字エンコーディングはutf8に設定されています。これにより、投稿後の中国語の文字化けの問題を解決できます。コード内でrequest.setCharacterEncoding("UTF-8")を設定する必要はありません。 >getメソッドの中国語文字化け問題については、プロトタイプとの整合性を保つため、getメソッドを使用せずにpostすることをお勧めします。 js は中国語を処理します。次のメソッドを使用して、ヘッダーの属性 RequestType をカスタマイズできます
コードをコピー
コードは次のとおりです。
$.ajax({
url: "3.jsp",
type: "post",
data: {name:"中文"},
beforeSend: function(XMLHttpRequest){
XMLHttpRequest.setRequestHeader("RequestType", "ajax");
alert("Start"); complete: function (XMLHttpRequest, textStatus){alert("Complete:" textStatus);
}
});
filter代码如下:
public void doFilter(ServletRequest request, ServletResponse 応答,
FilterChain チェーン) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
if (req.getHeader("RequestType") != null && req.getHeader("RequestType ").equalsIgnoreCase("ajax"))) {
request.setCharacterEncoding("utf-8");
} else {
request.setCharacterEncoding("gbk");
}
chain.doFilter(リクエスト, レスポンス);
}