2012-09-11 92 views
2

这是我的Ajax调用:<body onload = "${remoteFunction(controller:'accountManagement', action:'createAccount', params:[facebookUID: params.facebookUID, gender: params.gender, firstName: params.firstName, lastName: params.lastName])}">的Grails:页面不会重定向结束后Ajax调用

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

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'); 


} 
` 

它不重定向。相反,它保持在它开始的相同加载页面上。

回答

3

如果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属性进行更新的元素。

+0

嗯,这对我不起作用,脚本块如何被假设执行? –

+0

您是否在浏览器中呈现AJAX响应? – ataylor

+0

啊,远程功能部分是有意义的,谢谢你更新答案。 –

1

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

+0

你是什么意思的页面级动作重定向? –

+0

@JamesMcMahon,通过“page-level”,我的意思是一个控制器动作,它被来自页面的调用(即普通链接)所击中,而不是AJAX调用。主要区别在于浏览器如何处理响应,或者像在普通的页面请求中一样刷新整个屏幕,或者将请求的最终结果交给JavaScript处理程序,就像使用AJAX调用一样。 – cdeszaq