Есть веб-приложение на Spring MVC, клиентская сторона посылает Ajax запросы на сервер.
Есть класс, замапленный на:
@RequestMapping("/cars")
Маппинг метода, принимающего Ajax запрос:
@RequestMapping(method = RequestMethod.POST)
Ajax запрос:
$.ajax({
type: 'POST',
url: '/cars',
data: msg,
success: function(receive) {
alert(receive);
},
error: function() {
alert('Error');
}
});
Имя варника: shop
Проблема:
Когда стартую через IDEA localhost:8080/cars запрос обрабатывается, когда через сервер localhost:8080/shop/cars - ошибка 404
Вопрос: По какому адресу Ajax отправляет запросы - дописывает к корневомн url строку из поля url в его описании?
У браузера своё представление о том, какой адрес является базовым. Причём отличное от представления серверной стороны. В Вашем случае это будет localhost:8080 хоть в IDE, хоть в сервере.
В JSP вызов ajax можете написать так:
$.ajax({
type: 'POST',
url: '${pageContext.request.contextPath}/cars',
data: msg,
success: function(receive) {
alert(receive);
},
error: function() {
alert('Error');
}
});
pageContext.request.contextPath будет пустой в IDE и /shop на сервере.
url соответственно /cars или /shop/cars в зависимости от ситуации.
И таким нехитрым образом будет работать везде. Даже если переименуете своё приложение, то всё равно будет работать.
Можно попробовать установить базовый адрес с помощью элемента <base>.
<base href="${pageContext.request.contextPath}/"/>
И использовать относительные ссылки (без / спереди).
$.ajax({
type: 'POST',
url: 'cars',
Точно не знаю, но скорей всего сработает.
<base> заставит браузер (и как следствие ajax?) пересмотреть свою позицию относительно того, какой адрес является базовым для относительных ссылок.
Но и Вам придётся пересмотреть все ссылки на странице и привести их в согласие с <base>.
Можно создать глобальную переменную javascript в первых строках JSP
<script>
CONTEXTPATH = "${pageContext.request.contextPath}"
</script>
И использовать её в скриптах
$.ajax({
type: 'POST',
url: CONTEXTPATH + '/cars',
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости