私はajaxが初めてです。要件はかなり単純です。送信ボタンが押されると、JavaScript は非同期要求を実行し、サーバー側がユーザー入力を検証します。入力に問題がなければ、フォームは標準の送信を行いますが、それ以外の場合はエラー メッセージが表示されます。
だから、ここに私のフォームがあります:
<form id="form" action="dosomething.jsp" method="post">
<input type="text" name="name">
<input type="text" name="email">
<input id="submit" type="submit" value="Go">
</form>
ここに私のJavaScriptがあります:
$(document).ready(function() {
$("#form").submit(function(event) {
event.preventDefault();
var form = $(this);
var button = $("#submit");
button.attr("disabled", "disabled");
$.ajax({
url: "ValidateServlet",
type: "post",
data: form.serialize(),
success: function(msg) {
if(msg== ""){
form.unbind("submit");
form.submit();
} else{
alert(msg);
button.removeAttr("disabled");
}
}
});
});
});
1 つの機能が動作しないことを除いて、コードは正常にform.submit();
動作します。ajax()関数の外でこれを試してみると、送信されるので、スコープに問題があると思いますが、修正できません。
を明確にさせてくださいform.unbind();
。の行を削除したとしましょう。つまり、成功した場合にform.submit();
のみ存在します。初めて送信ボタンを押すと、フォームは非同期リクエストを実行して、通常どおり検証します。入力が正しい場合 (つまり、送信ボタンをもう一度押すと、送信イベントのバインドが解除されているため、標準の送信が実行されます)。したがって、少なくとも私の懸念では、問題はそれにはありません。form.unbind();
(if(msg = ""))
msg = ""
form.unbind();
サーブレット コード:
public void doPost(HttpServletRequest request,HttpServletResponse response)
throws ServletException, IOException{
PrintWriter out = response.getWriter();
String msg = "";
String name = request.getParameter("name");
String email = request.getParameter("email");
if("".equals(name)){
msg += "<li>Please enter name</li>" ;
}
if("".equals(email)){
msg += "<li>Please enter email</li>" ;
}
if(title.length() > 20 ){
msg += "<li>Name should be lesser than 20 character.</li>" ;
}
if(email.length() > 30){
msg += "<li>Title should be lesser than 30 character.</li>" ;
}
if(! "".equals(msg)){
msg = "<p>Error :</p><ul>" + msg;
msg += "</ul>";
out.print(msg);
}
out.close();
}