2015-03-05 2 views
2

ViewResolver (мой JSP находится в правой папке, как указано на значение префикса):AJAX возвращает 404 в Spring MVC

<!-- Resolves views selected for rendering by @Controllers --> 
<!-- to .jsp resources in the /WEB-INF/views directory --> 
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
    <beans:property name="prefix" value="/WEB-INF/views/" /> 
    <beans:property name="suffix" value=".jsp" /> 
</beans:bean> 

Servlet отображения:

<servlet-mapping> 
    <servlet-name>appServlet</servlet-name> 
    <url-pattern>*.fst</url-pattern> 
</servlet-mapping> 

Контроллер:

@Controller 
public class HomeController { 
    private static final Logger logger = 
     LoggerFactory.getLogger(HomeController.class); 

    @RequestMapping("/home") 
    public ModelAndView home(String user, HttpServletRequest request) { 
     logger.info("Home controller has been executed"); 
     ModelAndView mv = new ModelAndView(); 

     mv.addObject("userName", user); 
     mv.addObject("controllerName", request.getRequestURI()); 
     mv.setViewName("home"); 

     return mv; 
    } 

    @RequestMapping(value = "/testAjax", method = RequestMethod.POST) 
    public String testAjax(@RequestParam("memberId") String id, 
     HttpServletRequest request, HttpServletResponse response, 
     Locale locale, Model model) { 

     logger.info("Text Ajax action has been executed. My Parameter is " + id); 

     return id; 
    } 
} 

После включения сервера Tomcat 8 на STS IDE доступ к этой сети с этим URL-адресом http://localhost:8080/home.fst работает нормально.

Но на странице вызова AJAX, как показано ниже бросает 404 ошибку:

$.ajax({ 
    type: "POST", 
    url: "/testAjax.fst", 
    data: {"memberId" : "test"}, 
    success: function (result) { 
     console.log(result) 
    } 
}); 

Это журнал консоли ошибок:

POST http://localhost:8080/testAjax.fst 404 (Not Found) 
k.cors.a.crossDomain.send      jquery-2.1.3.min.js:4 
n.extend.ajaxhome.fst:11 (anonymous function) jquery-2.1.3.min.js:3 
n.event.dispatch        jquery-2.1.3.min.js:3 
r.handle 

Странно то, что он называет testAjax контроллер просто отлично, и есть нет журнала ошибок на сервере.

logger.info("Text Ajax action has been executed. My Parameter is " + id); 

Когда textAjax действие вызывается мой AJAX, журнал печатается хорошо. Я тоже проверил это с отладочной точкой (это сломалось).

В чем дело? ??

+0

Try только с/testAjax в url –

+0

@HarshalPatil Хуже, чем пытаться с '.fst'. Он даже не может вызвать контроллер. – hina10531

+0

есть. я думаю, вам нужно указать корневой URL-адрес, а затем повторить попытку, как указать имя проекта в url, тогда/testAjax он будет работать. –

ответ

7

Все хорошо только добавить @ResponseBody аннотацию в методе, а также я предлагаю вам изменить ваш метод запроса POST к GET

Spring

@RequestMapping(value = "/testAjax", method = RequestMethod.GET) //Made Change 
@ResponseBody //added 
public String testAjax(@RequestParam("memberId") String id,  HttpServletRequest request, HttpServletResponse response, Locale locale, Model model) { 
    logger.info("Text Ajax action has been executed. My Parameter is " + id); 

    return id; 
} 

JQuery

$.ajax({ 
    type: "GET", //Made Change 
    url:"/testAjax.fst", 
    data: {"memberId" : "test"}, 
    success: function (result) { 
    console.log(result) 
    } 
}); 
+0

спасибо. Не могли бы вы объяснить, почему добавление '@ ResponseBody' могло бы решить эту проблему? – hina10531

+0

Добро пожаловать :). Поскольку мы хотим, чтобы контент не был полностью jsp-файлом. Простым способом @ResponseBody вернет содержимое напрямую без каких-либо JSP. – Venkat

+3

Я думаю, что POST также возможен и всегда лучше подходит для отправки данных. Основным решением является @ResponseBody. –

Смежные вопросы