How to redirect page after ajax complete?

Deadly 提交于 2021-01-29 03:57:42

问题


My ajax is performing successfully because it deletes the row from database :

    @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:/");
    }
    ...

At the view :

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

The problem is that after the ajax is complete then I saw the row on the list ! So how to redirect to the list actual page after ajax complete ?

UPDATE :

Here is servlet-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>

And here is 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>

回答1:


Consider using "success" event: http://api.jquery.com/Ajax_Events/

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



回答2:


You've got two options here. First, you can redirect on the front end after the ajax completes using the ajax success function like below:

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

Or preferably you can do it on the backend using spring mvc do the job. For this purpose remove the @Responsebody cuz you don't need it (you are not returning anything) and also change the return type to a String like below.

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

Here I am using index.html but change the name to your preferred page. As long as you've configured the Spring view resolver properly then it should work by itself. If you've put a suffix in the view resolver (for example .jsp) then you should return just the name of the page without the suffix and spring will figure out the page automatically like below

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



回答3:


You can Use this.This will redirect after response has arrived.

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


来源:https://stackoverflow.com/questions/39166645/how-to-redirect-page-after-ajax-complete

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!