Как обрабатывать данные поста в ajax при весенней загрузке - PullRequest
0 голосов
/ 18 апреля 2019

Я использую jquery ui sortable для изменения порядка страниц в моем проекте, однако, похоже, я не знаю, как правильно обрабатывать эти опубликованные данные ajax при весенней загрузке.

JQuery / Ajax

$("table#pages tbody").sortable({
        items: "tr:not(.home)",
        placeholder: "ui-state-highlight",
        update: function () {
            let ids = $("table#pages tbody").sortable("serialize");
            let url = "/admin/pages/reorder";

            // $.post(url, ids, function (data) {});
            $.ajax({
                url: url,
                method: "post",
                data: ids,
                beforeSend: function () {
                },
                complete: function () {
                },
                success: function (response) {
                }
            });
        }
    });

Итак, из вышесказанного переменная ids должна быть целым числом массива с именем id, поэтому я должен получить что-то вроде следующего в моем обработчике запросов = int[] id (идентификатор единственного числа правильный)

Итак, имея в виду вышеизложенное, я попытался сделать это в моем методе обработчика запросов:

@PostMapping("reorder")
    public void reorder(int[] id) {
        int count = 1;
        Page page;
        for (int pageId : id) {
            page = pageRepo.getOne(pageId);
            page.setSorting(count);
            pageRepo.save(page);
            count++;
        }
    }

Однако, используя точки останова, я вижу, что id на самом деле null, поэтому обработчик запросов явно не получает отправленные данные ajax.

Я получаю ошибку в chrome:

error: "Internal Server Error"

Я попытался добавить @RequestBody к параметру метода следующим образом:

public void reorder(@RequestBody int[] id) {...

Однако в этом случае он даже не достигает точки останова в методе, и я получаю следующую ошибку в chrome:

error: "Unsupported Media Type"

Если я не установил тип содержимого вручную, я получаю полезную нагрузку следующего запроса

Полезная нагрузка запроса:

id[]=29&id[]=3

тип контента:

Content-Type: application/x-www-form-urlencoded; charset=UTF-8

Я могу установить тип контента на json, однако я все еще получаю сообщение об ошибке, и мне никогда не приходилось делать это в других технологиях, поэтому я сомневаюсь, что это проблема.

1 Ответ

0 голосов
/ 18 апреля 2019

Поскольку полезная нагрузка id[]=29&id[]=3, то вам нужно

public void reorder(@RequestParam("id[]") int[] id) {

, поскольку id[] - это нестандартное имя параметра запроса, которое не может быть получено из имени параметра метода id.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...