Я написал JavaScript, страница JSP и сервлет Java для обработки раскрывающихся списков. Вот что у меня есть на данный момент:
Код JavaScript (для обработки раскрывающихся списков)
JavaScript отправляет запросы AJAX сервлету на основе выбранного параметра, ожидая ответов JSON с соответствующими данными. :
Код: Выделить всё
$(document).ready(function () {
$.ajax({
url: "GetSubcatFsubcatServlet",
method: "GET",
dataType: "json",
data: { operation: 'cat' },
success: function (data) {
$.each(data, function (key, value) {
$('#cat').append('' + value.cat + '');
});
},
error: function () {
alert('Error loading categories.');
}
});
$('#cat').change(function () {
let cid = $('#cat').val();
$('#subcat').empty().append('Υποκατηγορία');
$('#further_subcategory').empty().append('Υποκατηγορία-2');
$.ajax({
url: "GetSubcatFsubcatServlet",
method: "GET",
dataType: "json",
data: { operation: 'subcat', id: cid },
success: function (data) {
$.each(data, function (key, value) {
$('#subcat').append('' + value.subcat + '');
});
},
error: function (jqXHR, textStatus, errorThrown) {
console.log("Error loading subcategories:", textStatus, errorThrown, jqXHR.responseText);
alert('Error loading subcategories: ' + errorThrown);
}
});
});
$('#subcat').change(function () {
let sid = $('#subcat').val();
$('#further_subcategory').empty().append('Υποκατηγορία-2');
$.ajax({
url: "GetSubcatFsubcatServlet",
method: "GET",
dataType: "json",
data: { operation: 'fsubcat', id: sid },
success: function (data) {
$.each(data, function (key, value) {
$('#further_subcategory').append('' + value.fsubcat + '');
});
},
error: function () {
alert('Error loading further subcategories.');
}
});
});
});
Страница JSP включает раскрывающиеся меню, заполняемые на основе выбора пользователя.
Код: Выделить всё
Κατηγορία
Υποκατηγορία
Υποκατηγορία-2
Сервлет GetSubcatFsubcatServlet обрабатывает запросы категорий, подкатегорий и дополнительных подкатегорий.
Код: Выделить всё
public class GetSubcatFsubcatServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("application/json; charset=UTF-8");
response.setCharacterEncoding("UTF-8");
try (PrintWriter out = response.getWriter()) {
String opt = request.getParameter("operation");
if ("cat".equals(opt)) {
ArrayList categories = new GetAllCategories(con).getCategories();
out.write(new Gson().toJson(categories));
} else if ("subcat".equals(opt)) {
String subcatIdParam = request.getParameter("subcat_id");
Long subcatId = Long.parseLong(subcatIdParam);
ArrayList subcategories = new GetSubcategoriesByID(con).getSubcatByID(subcatId);
out.write(new Gson().toJson(subcategories));
} else if ("fsubcat".equals(opt)) {
String fsubcatIdParam = request.getParameter("fsubcat_id");
Long fsubcatId = Long.parseLong(fsubcatIdParam);
ArrayList furtherSubcategories = new GetFurtherSubcategoriesByID(con).getFSubcatByID(fsubcatId);
out.write(new Gson().toJson(furtherSubcategories));
} else {
response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
out.write("{\"error\": \"Invalid operation parameter.\"}");
}
} catch (NumberFormatException e) {
response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
LOGGER.log(Level.SEVERE, "Invalid ID format", e);
} catch (Exception e) {
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
LOGGER.log(Level.SEVERE, "Error processing request", e);
}
}
}
При выборе категории я получаю следующее сообщение: «Ошибка загрузки подкатегорий». Ошибка возникает в функции ошибок AJAX, но точная причина не ясна. Я проверил, что данные категории загружаются правильно при первоначальном вызове AJAX, но получение подкаталога не удалось.
Подробнее здесь: https://stackoverflow.com/questions/791 ... categories