2016-02-17 3 views
0

Я изучаю Jquery в эти дни и натолкнулся на сомнение в отправке данных. Давайте рассмотрим на примере нижеgetparameter call от JQuery Ajax

JSP:

<body> 
<form name="newForm" id="newForm" action="getData" method="get"> 
<input type="name"/> 
<input type="button" onclick="submit()"/> 
</form> 
</body> 

JS:

function submit(){ 
document.getElementById("newForm").submit(); 
} 

Servlet:

protected void doGet(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 
String x = request.getParameter("name"); 
system.out.println("Received name is "+ x); 
} 

Когда я запускаю выше программы, консоль печатает значения правильно.

Я запускаю то же самое с помощью JQuery, и код выглядит следующим образом.

$(document).ready(function() { 
    $("form1").submit(function() { 
     $.ajax({ 
      type : "get", 
      url : "getData", 
      success : function(msg) { 
       $('#header').append("Hi"); 
      } 
     }); 
     return false; 
    }); 
}); 

И ничего не происходит. Здесь мой вопрос: должен ли я обязательно отправить имя в data или он может работать так же, как в JavaScript, то есть без отправки параметра он будет выбирать данные?

Проще, чтобы получить параметры из JSP в сервлете с вызовом Ajax/Jquery, нужно ли принудительно отправить параметры в data.

Благодаря

ответ

1

Стандартная форма представить() метод просто отправляет форму через браузер - то же самое, как нажать на кнопку без события щелчка связанного, поэтому он не подает форму асинхронно.

Для вашего примера JQuery вам необходимо привязать событие 'submit' к форме, чтобы предотвратить ее поведение по умолчанию и отправить форму асинхронно.

Для того чтобы передать одни и те же данные в запросе в качестве первого примера, вам также потребуется сериализовать форму.

Например:

$(document).ready(function() { 
    $("#newForm").on('submit', function(e){ 
    $.ajax({ 
     type: "get", 
     url: "getData", 
     data: $(this).serialize(), 
     success: function(msg) { 
     $('header').append("Hi"); 
     } 
    }); 
    e.preventDefault(); 
    }).submit(); 
}); 

Работа скрипка: https://jsfiddle.net/rgh97b6h/1/

0

Вы должны указать name атрибут в вашем <input> тега (также необходимо указать type атрибут):

<input type="text" name="name"/>

После этого вы сможете получить этот параметр ameter в сервлет:

String x = request.getParameter("name");

Без этого, ваш первый пример также не будет работать:

Received name is null