【问题标题】:Grails: Page won't redirect after completed Ajax callGrails:完成 Ajax 调用后页面不会重定向
【发布时间】:2012-09-11 20:08:54
【问题描述】:

这是我的 ajax 调用:<body onload = "${remoteFunction(controller:'accountManagement', action:'createAccount', params:[facebookUID: params.facebookUID, gender: params.gender, firstName: params.firstName, lastName: params.lastName])}">

在我的控制器中,最后有一个重定向指令:

def createAccount = {

    if(user.save(flush:true) == null){
        ... 
    }
    else{
        ....

        for(int i = 0; i < categories.length; i++){
            ...
        }

        println "save to database: successful"

    }

    // Redirect to index action of person controller.
    redirect(controller:'user', action: 'authenticate');


}
`

它不会重定向。相反,它会停留在它开始时的同一加载页面上。

【问题讨论】:

    标签: javascript ajax grails


    【解决方案1】:

    如果 AJAX 调用返回重定向,浏览器将不会重定向。如果您想在 AJAX 调用后将用户发送到新页面,您需要自己在 Javascript 中执行此操作。示例:

    def url = createLink(controller: 'user', action: 'authenticate')
    render(contentType: 'text/html', text: "<script>window.location.href='$url'</script>")
    

    确保浏览器呈现 AJAX 响应。使用 grails remoteFunction 标签,您应该使用 update 属性指定要更新的元素。

    【讨论】:

    • 嗯这对我不起作用,脚本块应该如何执行?
    • 您是否在浏览器中呈现 AJAX 响应?
    • 啊,远程功能部分很有意义,感谢更新答案。
    【解决方案2】:

    重定向 ajax 调用只会重定向该调用,而不是整个页面。要使整个页面重定向,您需要在 JavaScript 中捕获重定向的 ajax 调用并从 JavaScript 执行重定向,或者您需要让页面级操作执行重定向。

    【讨论】:

    • 页面级操作重定向是什么意思?
    • @JamesMcMahon,“页面级”,我的意思是一个控制器动作,它被来自页面的调用(即普通链接)而不是 AJAX 调用击中。主要区别在于浏览器如何处理响应,或者刷新整个屏幕,就像普通页面请求一样,或者将请求的最终结果交给 JavaScript 处理程序,就像 AJAX 调用一样。
    猜你喜欢
    • 1970-01-01
    • 2015-07-14
    • 1970-01-01
    • 2011-12-17
    • 2012-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-24
    相关资源
    最近更新 更多