У меня два вида - adminPage.jsp и studentForm.jsp.
В adminPage у меня есть кнопка, которая позволяет пользователю открыть студента из (получить studentForm с помощью ajax). Пользователь может ввести данные студента в эту форму, а затем нажать кнопку регистрации, чтобы добавить студента в базу данных.
Эта операция прошла успешно, но у меня есть одна проблема. Пост-запрос (запрос на добавление студента в базу данных) вызывается из studentForm.jsp и в него тоже поступает результат. Я хочу заменить существующий studentForm на новый (ответ получен после почтового запроса), но в результате я заменяю всю страницу на studentForm.
Что мне изменить?
Это adminPage, где я делаю запрос и загружаю ответ в элемент div с id - viewContainer:
<%@taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script>
function onk() {
$.get({
url: "/student/studentForm",
success: function (result) {
$('#viewContainer').html(result);
}
});
}
</script>
</head>
<body>
<h4>Username: ${user.username}</h4>
<h1>heading 1</h1>
<p> paragraph 1</p>
<p> paragraph 2</p>
<input type = "button" id = "userAddLoader" value = "Add Student" onclick = "onk();"/>
<div id = "viewContainer" style = "background-color: red">
<!-- this is container -->
</div>
</body>
</html>
это studentForm.jsp:
<%@taglib prefix = "form" uri = "http://www.springframework.org/tags/form" %>
<%@ taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script>
$('#form1').onsubmit(function (e) {
var form = $('#form1');
$.post({
url: form.attr("action"),
data: form,
success: function (data) {
$('#viewContainer').html(data);
}
}
);
e.preventDefault(); //avoid to execute the actual submit of the form
});
</script>
</head>
<body>
<c:set var = "stat" scope = "request" value = "${status}"/>
<c:if test = "${stat == 'success'}">
<script>
alert("Student was successfully added");
</script>
</c:if>
<h6>New Student Registration</h6>
<form:form action = "/student/postStudent" method = "post" modelAttribute = "user" id = "form1">
Username: <form:input type = "text" path = "username" id = "username"/>
Password: <form:input type = "text" path = "password" id = "password"/>
<input type = "submit" value = "Register">
</form:form>
</body>
</html>
submit, кажется, устарел, и он тоже не отправляет форму .. Я использую spring -boot с конфигурацией по умолчанию
Затем отправьте форму с помощью прослушивателя событий нажатия кнопки



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я заменил это:
$('#form1').onsubmit(function (e) {
var form = $('#form1');
$.post({
url: form.attr("action"),
data: form,
success: function (data) {
$('#viewContainer').html(data);
}
}
);
e.preventDefault(); //avoid to execute the actual submit of the form
});
с этим:
$('#form1').on("submit", function (e) {
var form = $('#form1');
$.post({
url: form.attr("action"),
data: form.serialize(),
success: function (data) {
$('#viewContainer').html(data);
}
}
);
e.preventDefault();
});
и проблема была решена.
Вывод:
onSubmit в этом случае не работает. Может использоваться submit, но более новый подход, описанный в документации JQuery, - это on("submit", function (e) ....
форма должна быть сериализована form.serialize()
Проверьте свой сервлет, возможно, определено перенаправление.
onSubmitне является допустимым событием jquery, используйте вместо негоsubmit.