我是新來的ajax。這個要求非常簡單。當提交按鈕被按下時,javascript會做一個異步請求,服務器端會驗證用戶輸入。如果輸入正常,表單將執行標準提交,否則會顯示錯誤消息。jquery - .submit()函數不工作裏面的ajax()函數
所以,這裏是我的表格:
<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");
}
}
});
});
});
的代碼工作正常,但一個功能form.submit();
不工作。我在ajax()函數之外嘗試這樣做,它會提交,所以我認爲有關於範圍的問題,但我無法解決這個問題。
讓我來澄清一下form.unbind();
。假設我刪除了form.submit();
這一行,換句話說,成功的案例(if(msg = ""))
只有form.unbind();
。當我第一次按下提交按鈕時,表單會執行異常請求以正常驗證。如果輸入正確(即msg = ""
),當我再次按下提交按鈕時,它會執行標準提交,因爲我已經解除了提交事件。因此,至少在我的擔憂中,問題不在於那個form.unbind();
。
servlet代碼:
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();
}
爲什麼要再次提交表單..?只需刪除'form.unbind(「submit」);' – 2013-03-21 04:20:39
你可以改變事件在按鈕點擊運行,並刪除'form.unbind',它可能會更好。 – cbattlegear 2013-03-21 04:23:07
'form.unbind'應該解除onsubmit事件,然後執行標準提交。不知道它是否如此。 – user2081836 2013-03-21 04:25:48