$.ajax({
dataType: 'json ',type : 'POST',url : 'http://localhost/test/test.do',data : {id: 1, type: 'Product'},success : function(data){ } } ); 🎜>
問題:
バックグラウンド アクション プログラムを送信すると、取得される型が文字化けします
解決策:
方法 1: 前に使用する送信エンコード URI は 2 回エンコードされています。必ず 2 回エンコードする必要があります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; '' 他のものを使用します。 js フレームワークまたは xhr はほぼ同じです。
ここでのキーは charset=UTF-8 です。これがないと、jQuery の contentType は機能しません。は利用できません
1. テスト環境
jQuery:1.3.2
tomcat:5.5.17
2. テスト方法
1. 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",type: "get ",data: "name=中文",success: function(response){
alert(response);
}});
結果: 文字化け
$.get("2.jsp", { name : "中国語" },function(response){
alert(response);
});
結果: 正しい表示
$.get("2.jsp", "name=中文",function(response){
alert(response);
}); >
結果: 文字化けしたコード
2.post メソッド
サーバー側 Java コード:
コードをコピーします
クライアント JS コード:
コードをコピーします
結果: 正しく表示されました
コードをコピーします
結果: 正しく表示されました
コードをコピーします
コードは次のとおりです:
$.post("3.jsp", { name: "中文" },function(response){
alert(response);
}); 🎜>
結果: 正しく表示されました
コードをコピー
コードは次のとおりです: $.post("3.jsp", "name=中文",function(response){
alert(response); });
結果: 正しい表示
3. フィルターを使用します
コードをコピーします
コードは次のとおりです public void doFilter(ServletRequest request, ServletResponse response,
FilterChainchain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) request; .getHeader("X-Requested -With") != null && req.getHeader("X-Requested-With").equalsIgnoreCase("XMLHttpRequest")) {
request.setCharacterEncoding("utf-8");
} else {
request.setCharacterEncoding("gbk");
}
chain.doFilter(リクエスト, レスポンス);
jQuery になります。 ajax を使用する場合、ヘッダーに X-Requested-With を追加します。値は XMLHttpRequest です。フィルターが jQuery の ajax リクエストであると判断した場合、文字エンコーディングは utf8 に設定されます。これにより、送信後の中国語の文字化けの問題を解決できます。 request.setCharacterEncoding(( "UTF-8"); を設定する必要はありません。
getメソッドの中国語文字化け問題については、getメソッドを使用して中国語を投稿するのではなく、投稿することをお勧めします。代わりに ^-^
prototype.js の中国語の処理方法と一貫性を保つために、次のメソッドを使用してヘッダー
コードをコピーします
beforeSend: function(XMLHttpRequest){ XMLHttpRequest.setRequestHeader("RequestType", "ajax"); "開始");
}、
成功: function(data, textStatus){
alert(data);
エラー: function(XMLHttpRequest, textStatus, errorThrown) 🎜>alert("エラー: " textStatus);
},
complete: function(XMLHttpRequest, textStatus){
alert("Complete:" textStatus);
フィルター コードは次のとおりです。
コードをコピー
コード
public void doFilter(ServletRequest request, ServletResponse response,
FilterChainchain) throws IOException, ServletException {