Я использую 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, однако я все еще получаю сообщение об ошибке, и мне никогда не приходилось делать это в других технологиях, поэтому я сомневаюсь, что это проблема.