Как обработать запрос ajax jQuery в Spring?

Ссылка скопирована
1 ответ

Добрый день.

Передаю запрос со страницы на сервер через 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 - такого тоже не знаю...

  • My1Name,

    Переменная js в виде функции var $form по идее выдаст ошибку.

    это конструкция jquery, тут все более-менее норм.

  • My1Name,

    Переменные так не объявляются.

    Почему? Что мешает? Обычная нотация для понимания что это не дом обжект, а объект жквери.

    Если я ошибаюсь, дайте пожалуйста ссылку на информацию.

    https://stackoverflow.com/questions/10204606/is-th...

  • ThunderCat, действительно, проверил, оказывается имя переменных может состоять из букв, цифр и двух символов «$» «_». Однако, кто пишет на jQuery и использует «$» в имени переменных, тот извращенец.
  • My1Name, хм, некоторые вот статические переменные через _андерскор пишут, и считают других странными, так что на вкус и цвет...
  • ThunderCat, через знак доллара в jQuery ссылаются на методы и функции. Переменные со знаком доллара в имени - просто сбивают с толку.
  • ThunderCat, если со скриптом всё в порядке, то в контроллере не видно кто такой repo? Где в него положили product чтоб добавлять его в корзину?productsInBasket.add(repo.getProduct(productId)); Если есть ошибка, то надо бы лог ошибки добавлять к вопросу.
  • ИМХО. Это тот случай, как писать не надо... Очень интересно, но ничего непонятно. Для таких задач, на Хабр нужно создать ещё один раздел "разминка для мозга".

    Если вы используете HttpSession для работы с объектом, то наверно нужно возвращать не стринг в виде переадресации, а ModelAndView ("redirect:/product/basket"); Или добавить @ResponseBody к методу, коль вы работаете с ajax.

  • Ответы:

    1. Ключи JSON регистрозависимы: productId ≠ productid
    2. @RequestParam получает параметр не из тела запроса, а из url параметров (?productId=...)
    3. Проверьте, возможно ли приведение объекта из сессии к List<Product>

    И самое главное: сервер ожидает обязательный параметр "product", но вы его не передаете

    Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Стас DB Ответ

    Для обработки запроса 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. Если у вас возникнут дополнительные вопросы, не стесняйтесь задавать их.

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно