Как обработать запрос ajax jQuery в Spring?
Добрый день.
Передаю запрос со страницы на сервер через jQuery $.post(). Данные уходят, но возвращается внутренняя ошибка сервера. Т.е. данные не обрабатываются корректно. Не могу понять в чем проблема.
<script> $('#purchase_form').on('submit', function(event){ event.preventDefault(); var $form = $( this ); product = $form.find( "input[name='productId']" ).val(); url = $form.attr('action'); var posting = $.post( url, { productid: product } ); posting.done(function( data ) { $('#purchase').empty().html("<p>SUCCESS</p>"); }); posting.fail(function( data ) { $('#purchase').empty().html("<p>FAIL</p>"); }); }); </script> |
<script> $('#purchase_form').on('submit', function(event){ event.preventDefault(); var $form = $( this ); product = $form.find( "input[name='productId']" ).val(); url = $form.attr('action'); var posting = $.post( url, { productid: product } ); posting.done(function( data ) { $('#purchase').empty().html("<p>SUCCESS</p>"); }); posting.fail(function( data ) { $('#purchase').empty().html("<p>FAIL</p>"); }); }); </script>
контроллер:
@PostMapping("/addtobasket") public String addToBasket(@RequestParam("product") int productId, HttpSession session) { List<Product> productsInBasket = null; if(session.getAttribute("basket")!=null) productsInBasket = (List<Product>) session.getAttribute("basket"); else productsInBasket = new ArrayList<Product>(); productsInBasket.add(repo.getProduct(productId)); session.setAttribute("basket", productsInBasket); return "redirect:/product/basket"; } |
@PostMapping("/addtobasket") public String addToBasket(@RequestParam("product") int productId, HttpSession session) { List<Product> productsInBasket = null; if(session.getAttribute("basket")!=null) productsInBasket = (List<Product>) session.getAttribute("basket"); else productsInBasket = new ArrayList<Product>(); productsInBasket.add(repo.getProduct(productId)); session.setAttribute("basket", productsInBasket); return "redirect:/product/basket"; }
Дополнительно:
Синтаксис такой, будто код сгенерирован ботом (chatGPT?).
Переменная js в виде функции var $form по идее выдаст ошибку. И чтоб в Spring-e получали атрибуты через HttpSession - такого тоже не знаю...
Переменная js в виде функции var $form по идее выдаст ошибку.
это конструкция jquery, тут все более-менее норм.
Переменные так не объявляются.
Почему? Что мешает? Обычная нотация для понимания что это не дом обжект, а объект жквери.
Если я ошибаюсь, дайте пожалуйста ссылку на информацию.
https://stackoverflow.com/questions/10204606/is-th...
Если вы используете HttpSession для работы с объектом, то наверно нужно возвращать не стринг в виде переадресации, а ModelAndView ("redirect:/product/basket"); Или добавить @ResponseBody к методу, коль вы работаете с ajax.
Ответы:
- Ключи JSON регистрозависимы: productId ≠ productid
- @RequestParam получает параметр не из тела запроса, а из url параметров (?productId=...)
- Проверьте, возможно ли приведение объекта из сессии к List<Product>
И самое главное: сервер ожидает обязательный параметр "product", но вы его не передаете
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для обработки запроса AJAX jQuery в Spring, вам необходимо создать контроллер, который будет принимать AJAX запрос и возвращать данные.
Прежде всего, убедитесь, что у вас есть зависимости для Spring Web и Jackson в вашем проекте. Для этого добавьте следующие зависимости в ваш файл pom.xml:
```xml
org.springframework.boot
spring-boot-starter-web
com.fasterxml.jackson.core
jackson-databind
```
Затем создайте контроллер для обработки AJAX запроса. Ниже приведен пример контроллера для обработки запроса POST:
```java
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class AjaxController {
@PostMapping("/ajaxRequest")
public String handleAjaxRequest(@RequestBody String data) {
// Обработка запроса
return "Ответ на ваш запрос";
}
}
```
Теперь в вашем JavaScript коде используйте jQuery для отправки AJAX запроса на сервер. Ниже приведен пример:
```html
$.ajax({
type: "POST",
url: "/ajaxRequest",
data: JSON.stringify({key: "value"}),
contentType: "application/json",
success: function(response) {
console.log(response);
}
});
```
Когда вы отправите AJAX запрос с помощью jQuery, он будет перенаправлен на метод handleAjaxRequest вашего контроллера. Метод примет данные из запроса и вернет ответ, который будет отображен в консоли браузера.
Надеюсь, эта информация поможет вам обработать запрос AJAX jQuery в Spring. Если у вас возникнут дополнительные вопросы, не стесняйтесь задавать их.