2015-04-21 4 views
-1

Я использую jsp для отправки формы в сервлет. На стороне сервера выполняется обработка, а затем я хочу сообщить пользователю о том, успешно ли это или нет. Дело в том, что я не получаю предупреждения, но не исключение. И когда пост заканчивается, я вижу (хотя я не хочу) значения вида на браузер URL вроде получить .... Вот кодJsp post с jquery to servlet

<form id="register" class="form-signin" > 
<h2 class="form-signin-heading">Register here</h2> 
First Name:<input type="text" name="firstName" class="input-block-level" placeholder="user name" required><br> 
Last Name:<input type="text" name="lastName" class="input-block-level" placeholder="user name" required><br> 
User Name:<input type="text" name="user" class="input-block-level" placeholder="user name" required><br> 
Password:<input type="password" name="password" class="input-block-level" placeholder="Password" required><br> 
Retype Password:<input type="password" name="retypedPassword" class="input-block-level" placeholder="Password" required><br> 
Email:<input type="email" name="email" class="input-block-level" placeholder="email required"><br> 
Retype Email:<input type="email" name="retypedEmail" class="input-block-level" placeholder="email required"><br> 
<input type="submit" value="submit" id="submitButton" class="btn btn-primary"> 

</form> 
<script type="text/javascript"> 
$(document).ready(function(){ 
    $("#submitButton").on("click", function(){ 

    $.ajax({ 
      type: "POST", 
      url: "RegisterServlet", //process to mail 
      data: $("#register").serialize(), 
      success: function(msg){ 

       alert(msg); 
      }, 
      error: function(){ 
       alert("failure editing account. User name already taken"); 
      } 
     }); 

}); 

}); 

</script> 

на стороне сервера

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    String firstName = request.getParameter("firstName"); 
    String lastName = request.getParameter("lastName"); 
    String username = request.getParameter("user"); 
    String password = request.getParameter("password"); 
    String retypedPassword = request.getParameter("retypedPassword"); 
    String email =request.getParameter("email"); 
    String retypedEmail = request.getParameter("retypedEmail"); 
    String hash = UUID.randomUUID().toString(); 
    if(firstName == null || firstName.equals("")){ 
     errorMsg = "First name can't be null or empty."; 
    } 
    if(lastName == null || lastName.equals("")){ 
     errorMsg = "Last name can't be null or empty."; 
    } 
    if(username == null || username.equals("")){ 
     errorMsg = "User name can't be null or empty."; 
    } 
    if(password == null || password.equals("")){ 
     errorMsg = "Password can't be null or empty."; 
    } 
    if(retypedPassword == null || retypedPassword.equals("")){ 
     errorMsg = "Retype password can't be null or empty."; 
    } 
    if(email == null || email.equals("")){ 
     errorMsg = "Email can't be null or empty."; 
    } 
    if(retypedEmail == null || retypedEmail.equals("")){ 
     errorMsg = "Retyped email can't be null or empty."; 
    } 
    if(password.equals(retypedPassword)==false){ 
     errorMsg = "Passwords do not match."; 
    } 
    if(retypedEmail.equals(email)==false){ 
     errorMsg = " Emails are not the same."; 
    } 
    if(errorMsg != null){ 
     response.setContentType("text/plain"); // Set content type of the response so that jQuery knows what it can expect. 
     response.setCharacterEncoding("UTF-8"); 
     response.getWriter().write(errorMsg); 

    } 

но я ничего не получаю, даже если я пытаюсь. Что не так с этим кодом? Почему после отправки я вижу параметры на URL-адресе?

+0

попробуйте добавить журналы на клиента и на стороне сервера. Отладка потока. Вы узнаете, где он ломается. – underdog

+0

Вы должны запретить поведение по умолчанию формы submit. Например, добавив 'return false;' в конце функции 'click'. – Regent

ответ

1

Почему после отправки я вижу параметры на URL-адресе?

Вы можете увидеть этот Params в URL, потому что ваша форма не подают с помощью Ajax (JQuery), вы должны использовать submit обработчик на форме, вместо щелчка обработчика по кнопке.

Когда вы привязываете событие click на кнопке submit, перед тем, как связаться с jquery, отправьте форму.

Используйте это: e.preventDefault(); для предотвращения отправки формы по умолчанию.

Вместо использования submit кнопки обработчик щелчка:

$("#submitButton").on("click", function(){ 
    //your code 
} 

Использование form представить обработчик:

$('#register').on("submit", function(e) { 
    e.preventDefault();//preventing default submission 
    //your code 
} 
+0

@Regent, как я могу видеть в коде OP. Я считаю, что его форма отправляется по умолчанию. Jquery ajax call не работает. – Manwal

+0

Запрос по умолчанию отправлен в исходном коде, да.Но наиболее важной частью вашего ответа является 'e.preventDefault();' (которого не было в начале), а не кнопки _change, чтобы создать submit_. – Regent

+0

Спасибо всем за ваши предложения, проблема решена. Похоже, что return false или e.preventDefault() устранили проблему. – user3485417

0

Похоже, ваша форма представляется через контроль'' вместо вашего JavaScript. Метод по умолчанию для формы - GET (см. here для подробного объяснения), и именно поэтому вы видите параметры в адресной строке.

Изменить тип входа от submit к button или замените <input> с <button>, и вы будете иметь гораздо более жесткий контроль над тем, что происходит.

0

Проблема заключается в том, что ваша форма регистрации отправляется, а ваш вызов ajax терпит неудачу.

Я вижу (хотя я не хочу) значения формы в браузере URL подобно получить

Поскольку форма получает представлена ​​и метод не указан, по умолчанию прибудет что приводит к отправке параметров через url.

Попробуйте вместо этого:

$(document).ready(function(){ 
    $("#register").on("submit", function(){ 
    /* to do here */ 
    return false;// restricts form submit 
    } 
};