2013-03-21 128 views
0

我是新來的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(); 
} 
+4

爲什麼要再次提交表單..?只需刪除'form.unbind(「submit」);' – 2013-03-21 04:20:39

+0

你可以改變事件在按鈕點擊運行,並刪除'form.unbind',它可能會更好。 – cbattlegear 2013-03-21 04:23:07

+0

'form.unbind'應該解除onsubmit事件,然後執行標準提交。不知道它是否如此。 – user2081836 2013-03-21 04:25:48

回答

1

您是否嘗試過使用$。對()和$ .off()來綁定你的事件?

$(document).ready(function() { 
    $("#form").on('submit',function(event) { 
     event.preventDefault(); 
     var frm = $(this); 
     var btn = $("#submit"); 
     button.attr("disabled", "disabled"); 
     $.ajax({ 
      url: "ValidateServlet", 
      type: "post", 
      data: frm.serialize(), 
      success: function(msg) { 
       if(msg== ""){ 
        frm.off("submit"); 
        frm[0].submit(); 
       } else{ 
       alert(msg); 
       btn.removeAttr("disabled"); 
       } 
      } 
     }); 
    }); 
}); 

我也儘量避免使用「形式」作爲變量名

+0

我試過了,結果是一樣的。 – user2081836 2013-03-21 04:43:06

+0

你的servelet返回什麼?是我們在這裏測試的空字符串if(msg ==「」)'還是應該嘗試其他測試'if(!msg)'? – kevmc 2013-03-21 04:47:18

+0

如果驗證是正確的,味精是空的。我也可以包含servlet代碼。實際上,我已經在'if(msg ==「」)'內部放置了一個'alert()'來測試成功案例是否可以正常運行,並且它確實如此。因此,這並不重要。唯一的問題是'form.submit()'無法運行。 – user2081836 2013-03-21 05:20:59