【问题标题】:spring modelandview redirect not working in jquery ajax callspring modelandview重定向在jquery ajax调用中不起作用
【发布时间】:2013-10-22 22:37:57
【问题描述】:

我正在返回控制器下方的模型视图属性表单

@RequestMapping(value = "/signin", method = RequestMethod.POST)
    public @ResponseBody
    ModelAndView loginUser(@RequestParam(value = "userName") String userName,
            @RequestParam(value = "password") String password,
            ModelAndView model) {
     on success login

       return new ModelAndView("redirect:/another controller here");
     on failure login 

           return new ModelAndView("same page");

我有调用此控制器的 jquery ajax 调用,当成功登录时,我希望用户进入另一个页面,但我的响应到达同一页面而不是重定向到另一个页面。

需要帮助

编辑 - 我正在使用基于 URL 的视图解析器和 Apache 磁贴进行视图渲染

【问题讨论】:

    标签: javascript jquery ajax spring spring-mvc


    【解决方案1】:

    假设我理解您的问题,重定向将在 AJAX 调用的上下文中发生 - 因此 JQuery AJAX 代码将跟随重定向并接收从 /another controller here 返回的响应。这不会触发整个页面刷新,但响应将由 JQuery AJAX 代码提供,用于在当前页面中呈现。

    要在成功登录时更改整个页面,最好不要在此屏幕上使用 AJAX。

    或者,您可以返回一些指示符来告诉 JQuery 重定向。例如:

    @RequestMapping(value = "/signin", method = RequestMethod.POST)
        public @ResponseBody
        ModelAndView loginUser(@RequestParam(value = "userName") String userName,
            @RequestParam(value = "password") String password,
            ModelAndView model) {
    
         on success login
           ModelAndView modelAndView = new ModelAndView("same page");
           modelAndView.addObject("redirectUrl", "/another controller here");
           return modelAndView;
    
         on failure login 
           return new ModelAndView("same page");
    

    然后在 same page 中添加一些 Javascript,以查找 redirectUrl 的存在并在存在时触发整页重定向。

    var redirect = '${redirectUrl}';
    if (redirect) {
        window.location.replace(redirect);
    }
    

    【讨论】:

    • 你救了我的命,我在敲我的头,兄弟。非常感谢它的工作。
    • 您提到不要为此使用 Ajax 调用,能否请您解释一下使用 Ajax 登录时会出现什么问题,如果您有更好的方法将非常感谢
    • 如果您想在登录后保持在同一页面上,那么这将是使用 AJAX 的好案例。例如,您可能在页面侧边栏或横幅中嵌入了某种登录小部件,允许用户在停留在同一页面时登录。但是,如果您有一个专用的登录屏幕,在成功登录后将您发送到一个完全不同的页面,那么使用常规浏览器表单帖子会更简单、更传统。它不那么复杂 - 从用户的角度来看可能更自然一些。
    • 是的,我确实有单独的登录页面,成功登录后会转到不同的页面,但如果出现错误,例如:- 用户名或密码无效,我觉得 ajax 是更好的选择,因为我不想刷新页面。当我得到响应表单控制器时,如果 ajax 成功登录,是否可以提交表单?。
    • 通常只有一个登录页面,一个完整的表单帖子,而不是 AJAX,会更传统。当发生登录错误时,将填充一个 Errors 对象(在控制器中或通过 Spring Security 等框架),然后将请求转发回登录页面,错误将从 Errors 对象呈现。没有什么可以阻止您使用 AJAX,但它确实会使这种页面的传统交互变得过于复杂。如果您担心性能,我怀疑您会注意到任何差异。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-18
    • 2011-02-25
    • 2022-10-23
    • 1970-01-01
    相关资源
    最近更新 更多