jQueryがAJAXを呼び出したときのGetとpostの共通の文字化けし解決方法
6402 ワード
以前、新浪ブログでjsがAJAXを呼び出す際のGetとpostの文字化けしの解決策を書いたことがありますが、jsコードを使うのは煩雑で、ajaxを使ってデータのインタラクションを行う際にjsの成熟したフレームワークであるjQueryを使うことができます.
登録ログインにしてもページング検索にしても、必要なページデータを得るためにサーバにパラメータをコミットする必要があるWebサイトの設計.ユーザーがページをリフレッシュすることによる苦しみを減らすためにajaxが誕生した.しかし、初心者がプロジェクト開発を行うと、中国語の文字化けして煩わしい問題に直面します.
次に、文字化けしてしまう可能性のある場所、どのような方法で解決する必要があるかを簡単な例で説明します.
この例では、主にユーザ登録時にユーザ名が正しいか(既存)を実装し、フォーカスがusernameテキストtextを移動すると、usernameを非同期でコミットし、servletによって抽出判断し、結果をページに戻してヒントを与える.
最初のステップでは、jQuery_Ajaxという名前のWebプロジェクト(デフォルトのGBK形式)を新規作成します.WebRootディレクトリの下にjsファイルパッケージを新規作成し、jquery-1.4.4.jsを配置します.
ステップ2では、srcの下にservletパッケージを作成し、Valiを作成します.java
コードから分かるように、符号化フォーマットを含む文は乱符号化を解決する方法の一つである.
コードでの注意:1.URLDecoder.decode(request.getParameter(「userName」)、「utf-8」)-ページから送信されたデータをフォーマット変換して抽出
2.response.setContentType(「text/html;charset=utf-8」)-応答戻り値をutf-8符号化してページに戻る
3.特に2の変換は、本方法内のすべてのresponseの前に書く必要があります.そうしないと、失効する可能性があります.
4.本servletのデータに対するフォーマット符号化はPostメソッドにのみ適しており、提出方式がGETであればページデータを抽出するコードは以下の通りである.
第3歩は、簡単な登録ページajaxを作成する.jsp
コードでの注意:1.ページをutf-8に設定、jquery-1.4を導入する.4.js
2.ajaxはPOSTメソッドでデータを転送し、dataの設定に注意します.戻りデータがspanラベルに入力されます.
GETメソッドを使用してページデータを渡す場合、jsコードは次のとおりです.
最後のステップはwebです.xml構成servletとマッピング
以上のコードの作成により、本登録検証のプロジェクトは完了し、tomcatに配備され、Webページからアクセスされます.
最後に大神のjQuery文字化けし問題解決方法をまとめます.
1.ページコードをチェックし、次のようにページコードをutf 8に設定します.
2.servletをチェックし、doPostメソッドまたはdoGetメソッドに次のコードを追加します.
response.setContentType("text/xml;charset=utf-8");
3.tomcatファイルを変更し、TOMCAT_HOME/conf/server.xmlファイルにURIEncoding="utf 8"を追加:
4.工程でフィルタを追加し、符号化方式をutf 8に設定
以上の4ステップの操作を経ても、問題は依然として発生しています.
5.ieのhttpヘッダを確認し、contentTypeフィールドを以下のように表示します.
contentType:"application/x-www-form-urlencoded"
6.firefoxのhttpヘッダを確認し、contentTypeフィールドを次のように表示します.
contentType:"application/x-www-form-urlencoded;charset=UTF-8"
5,6の2ステップを比較すると、問題が発生します.
7.jQuery-1を修正する.x.x.jsファイル、
contentType:「アプリケーション/x-www-form-urlencoded」を次のコードに変更
contentType:"application/x-www-form-urlencoded;charset=UTF-8"
登録ログインにしてもページング検索にしても、必要なページデータを得るためにサーバにパラメータをコミットする必要があるWebサイトの設計.ユーザーがページをリフレッシュすることによる苦しみを減らすためにajaxが誕生した.しかし、初心者がプロジェクト開発を行うと、中国語の文字化けして煩わしい問題に直面します.
次に、文字化けしてしまう可能性のある場所、どのような方法で解決する必要があるかを簡単な例で説明します.
この例では、主にユーザ登録時にユーザ名が正しいか(既存)を実装し、フォーカスがusernameテキストtextを移動すると、usernameを非同期でコミットし、servletによって抽出判断し、結果をページに戻してヒントを与える.
最初のステップでは、jQuery_Ajaxという名前のWebプロジェクト(デフォルトのGBK形式)を新規作成します.WebRootディレクトリの下にjsファイルパッケージを新規作成し、jquery-1.4.4.jsを配置します.
ステップ2では、srcの下にservletパッケージを作成し、Valiを作成します.java
package servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLDecoder;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
public class Vali extends HttpServlet {
@Override
protectedvoid service(HttpServletRequest request, HttpServletResponse response)
throwsServletException, IOException {
StringuserName = URLDecoder.decode(request.getParameter("userName"),"utf-8");
System.out.println(userName);
response.setContentType("text/html;charset=utf-8");
PrintWriter pw =response.getWriter();
if(userName.equals(" ")){
pw.println(" ");
}else{
pw.println(" ");
}
}
}
コードから分かるように、符号化フォーマットを含む文は乱符号化を解決する方法の一つである.
コードでの注意:1.URLDecoder.decode(request.getParameter(「userName」)、「utf-8」)-ページから送信されたデータをフォーマット変換して抽出
2.response.setContentType(「text/html;charset=utf-8」)-応答戻り値をutf-8符号化してページに戻る
3.特に2の変換は、本方法内のすべてのresponseの前に書く必要があります.そうしないと、失効する可能性があります.
4.本servletのデータに対するフォーマット符号化はPostメソッドにのみ適しており、提出方式がGETであればページデータを抽出するコードは以下の通りである.
request.setCharacterEncoding("utf-8");
StringuserName = request.getParameter("userName");
userName= new String(userName.getBytes("iso-8859-1"),"utf-8");
第3歩は、簡単な登録ページajaxを作成する.jsp
<%@ page language="java"import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath =request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTDHTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'ajax.jsp' starting page</title>
<metahttp-equiv="pragma" content="no-cache">
<metahttp-equiv="cache-control" content="no-cache">
<metahttp-equiv="expires" content="0">
<metahttp-equiv="keywords"content="keyword1,keyword2,keyword3">
<metahttp-equiv="description" content="This is my page">
<!--
<linkrel="stylesheet" type="text/css"href="styles.css">
-->
<scripttype="text/javascript"src="js/jquery-1.4.4.js"></script>
<scripttype="text/javascript">
function vali(){
$.ajax({
type:"POST",
url:"/jQuery_Ajax/Vali",
data:encodeURI(encodeURI("userName="+$(":text").val())),
success:function(data){
$("span").text(data);
}
});
}
</script>
</head>
<body>
:<inputtype="text" name="userName"onblur="vali();"/><span></span><br/>
:<inputtype="password" name="password" />
</body>
</html>
コードでの注意:1.ページをutf-8に設定、jquery-1.4を導入する.4.js
2.ajaxはPOSTメソッドでデータを転送し、dataの設定に注意します.戻りデータがspanラベルに入力されます.
GETメソッドを使用してページデータを渡す場合、jsコードは次のとおりです.
function vali(){
$.ajax({
type:"GET",
url:"/jQuery_Ajax/Vali",
data:encodeURI("userName="+$(":text").val()),
success:function(data){
$("span").text(data);
}
});
}
最後のステップはwebです.xml構成servletとマッピング
<servlet>
<description>This is the description of my J2EEcomponent</description>
<display-name>This is the display name of my J2EEcomponent</display-name>
<servlet-name>Vali</servlet-name>
<servlet-class>servlet.Vali</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Vali</servlet-name>
<url-pattern>/Vali</url-pattern>
</servlet-mapping>
以上のコードの作成により、本登録検証のプロジェクトは完了し、tomcatに配備され、Webページからアクセスされます.
最後に大神のjQuery文字化けし問題解決方法をまとめます.
1.ページコードをチェックし、次のようにページコードをutf 8に設定します.
2.servletをチェックし、doPostメソッドまたはdoGetメソッドに次のコードを追加します.
response.setContentType("text/xml;charset=utf-8");
3.tomcatファイルを変更し、TOMCAT_HOME/conf/server.xmlファイルにURIEncoding="utf 8"を追加:
4.工程でフィルタを追加し、符号化方式をutf 8に設定
以上の4ステップの操作を経ても、問題は依然として発生しています.
5.ieのhttpヘッダを確認し、contentTypeフィールドを以下のように表示します.
contentType:"application/x-www-form-urlencoded"
6.firefoxのhttpヘッダを確認し、contentTypeフィールドを次のように表示します.
contentType:"application/x-www-form-urlencoded;charset=UTF-8"
5,6の2ステップを比較すると、問題が発生します.
7.jQuery-1を修正する.x.x.jsファイル、
contentType:「アプリケーション/x-www-form-urlencoded」を次のコードに変更
contentType:"application/x-www-form-urlencoded;charset=UTF-8"