2012-09-13 160 views
0

我想通過Ajax/Jquery提交表單,並從手風琴步驟過程中的Servlet獲取響應,但對於我的生活,我無法弄清楚這一點。我有自己的形式,我有手風琴,但是當我把它們放在一起時,它不起作用。jquery ajax表單通過java提交servlet

這裏是因爲我已經把它一起代碼:

$(document).ready(function(){ 

$('label.form-field-label-required').append('&nbsp;<strong>*</strong>'); 

// accordion functions 
var accordion = $("#accordion").accordion({ 
     event: false, 
     autoheight: true, 
     animated: "slide", 
}); 
var current = 0; 

$.validator.addMethod("pageRequired", function(value, element) { 
    var $element = $(element) 
    function match(index) { 
     return current == index && $(element).parents("#accordion").length; 
    } 
    if (match(0) || match(1) || match(2)) { 
     return !this.optional(element); 
    } 
    return "dependency-mismatch"; 
}, $.validator.messages.required) 

var v = $("#cmaForm").validate({ 
    submitHandler: function() { 
     $.ajax({ 
        type:"post", 
        url:"ActionServlet", 
        data:"name="+name+"&sex="+gender, 
        success: function(response){ 

        // Change only the header of the file. 
        $("h1").text(response); 
        }, 
       }); 
          if (v2.form()) { 
         accordion.accordion("activate", 1); 
         current = 1; 
        } 
       } 
     }); 

表單代碼:

<h4><a href="#">Employee Personal Information</a></h4> 
    <div> 
      <form name="cmaForm" id="cmaForm" action="" method="post"> 
<h1 style="text-align:center">Hello Guest</h1> 
     <p>Please fill out your name and gender: <br></br> 
    Name: <input type="text" name="name" id="name"/><br/> 
    <input type="radio" name="sex" value="male"/> Male.<br/> 
    <input type="radio" name="sex" value="female"/> Female. </p> 
     <p> 
     <input name="formNext1" type="submit" class="open1 nextbutton" value="Next" alt="Next" title="Next" /> 
     </p> 
    </form> 

什麼是應該發生的是,在成功的H1文本應該改變,以反映輸入數據,然後第一個手風琴關閉,第二個手風琴打開。到目前爲止,所發生的只是頁面刷新,然後在地址欄中顯示:

http://localhost/test/index.htm?name=bnhjhj&sex=female# 

但是沒有其他事情發生。

我只包括第一個手風琴代碼來限制屏幕上的代碼量。如果你需要其餘的,我可以發佈它。

在此先感謝。

servlet代碼

import java.io.IOException; 
import java.io.PrintWriter; 
import javax.servlet.Servlet; 
import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

public class ActionServlet extends HttpServlet implements Servlet 
{ 

    private static final long serialVersionUID = 1L; 

    /** 
    * 
    */ 
    public ActionServlet() 
    { 
     super(); 
    } 

    /** 
    * 
    */ 
    protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException 
    { 
     doPost(req, res); 
    } 

     public void doPost (HttpServletRequest request, HttpServletResponse response) 
       throws ServletException, IOException { 
        String name= request.getParameter("name"); 
        String gender= request.getParameter("sex"); 
        PrintWriter out= response.getWriter(); 
         if(gender.equals("male")){ 
          out.print("Hello Mr "+ name +" your request was sent successfully."); 
          } 
          else{ 
          out.print("Hello Miss "+ name +" your request was sent successfully."); 
         } 
       } 
} 

回答

0

您做出調用jQuery的阿賈克斯(),該數據屬性更改爲是JSON而不是字符串。例如

$.ajax({ ..., data: { "name": name, "gender": gender }}); 
+0

好了,真棒,這讓我下一個手風琴,但H1頭部沒有與輸入數據更改: –

+0

我會嘗試使用警報(),看看你得到任何迴應回從服務器,然後嘗試更新DOM。 –

+0

另外,如果你得到一個錯誤,你不會知道它,因爲成功沒有被調用。你可能想用一個回調添加一個「error」屬性,所以如果發生什麼不好的事情,你可以得到一些關於它的細節。 –