2016-08-26 4 views
0

Мой Аякса успешно выступает, поскольку она удаляет строку из базы данных:Как перенаправить страницу после завершения ajax?

@Controller 
    ... 
    @ResponseBody 
    @RequestMapping(value = "/ajaxDeleteUser", method = RequestMethod.POST) 
    public ModelAndView ajaxDelUser(HttpServletRequest request) { 
     int userId = Integer.parseInt(request.getParameter("id")); 
     userDao.delete(userId); 
     return new ModelAndView("redirect:/"); 
    } 
    ... 

На взгляд:

<c:url value="/" var="home" scope="request" /> 
$.ajax({ 
     data: {"id":data}, 
     type: "POST", 
     url: "${home}"+"ajaxDeleteUser", 
     async: false 
}); 

Проблема в том, что после того, как ajax завершена, то я увидел строку в списке ! Итак, как перенаправить на страницу списка после ajax?

UPDATE:

Вот сервлет-context.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<beans:beans xmlns="http://www.springframework.org/schema/mvc" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:beans="http://www.springframework.org/schema/beans" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd 
     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> 

    <!-- DispatcherServlet Context: defines this servlet's request-processing infrastructure --> 

    <!-- Enables the Spring MVC @Controller programming model --> 
    <annotation-driven /> 

    <!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory --> 
    <resources mapping="/resources/**" location="/resources/" /> 

    <!-- 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> 

    <context:component-scan base-package="com.ambre.hib" /> 

</beans:beans> 

А вот web.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 

    <!-- The definition of the Root Spring Container shared by all Servlets and Filters --> 
    <context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>/WEB-INF/spring/root-context.xml</param-value> 
    </context-param> 

    <!-- Creates the Spring Container shared by all Servlets and Filters --> 
    <listener> 
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 

    <!-- Processes application requests --> 
    <servlet> 
     <servlet-name>appServlet</servlet-name> 
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
     <init-param> 
      <param-name>contextConfigLocation</param-name> 
      <param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value> 
     </init-param> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>appServlet</servlet-name> 
     <url-pattern>/</url-pattern> 
    </servlet-mapping> 

</web-app> 

ответ

2

Рассмотрите возможность использования "успеха" событие: http://api.jquery.com/Ajax_Events/

$.ajax({ 
     data: {"id":data}, 
     type: "POST", 
     url: "${home}"+"ajaxDeleteUser", 
     async: false, 
     success: function(result) { 
      location.href = "your_location" 
     } 
}); 
+0

он не работает ! – pheromix

+0

@pheromix попытка «ошибка» событие вместо «успеха», возможно, ваш запрос не удался – tmn4jq

+0

Что значит «не работает»? Вы проверили консоль своего браузера, есть ли что-нибудь в журналах? – tmn4jq

0

Вы можете использовать this.This будет перенаправлен после того, как ответ пришел.

$.ajax({ 
    data:{"id":data}, 
    type: "POST", 
    url: "${home}"+"ajaxDeleteUser", 
    async: false, 
    success: function(result) { 
     var link = "http://www.sample.com";  
     $(location).attr('href',link); 
    }); 
1

У вас есть два варианта. Во-первых, вы можете перенаправить на переднем конце после Аякса завершает с помощью функции Ajax успеха, как показано ниже:

success: function(result) { 
      location.href = "your_location" 
     } 

Или лучше вы можете сделать это на внутреннем интерфейсе с использованием Spring MVC сделать работу. Для этого удалите @Responsebody, потому что он вам не нужен (вы ничего не возвращаете), а также измените тип возвращаемого значения на строку, как показано ниже.

@RequestMapping(value = "/ajaxDeleteUser", method = RequestMethod.POST) 
public String ajaxDelUser(HttpServletRequest request) { 
    //your stuff goes here 
    .... 
    //important line 
    return "redirect:/index.html"; 
} 

Здесь я использую index.html, но изменяю его на предпочтительную страницу. Пока вы правильно настроили распознаватель Spring, он должен работать сам по себе. Если вы положили суффикс в виде распознавателе (например .jsp), то вы должны возвращать только имя страницы без суффикса и весной выяснят страницу автоматически, как показано ниже

return "redirect:/index"; //equals index.jsp 
+0

, метод, возвращающий строку в контроллере, не работает! – pheromix

+0

опубликуйте свой весенний webconfigurer, у вас есть viewResolver? Какую ошибку вы получаете? – george

+0

сделано, см. Обновления в моем вопросе. – pheromix

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