我的控制器方法有两个目的:处理传统的浏览器请求和使用映射资源通过REST客户端进行交互。
案例:这很方便,因为我可以将所有验证集中在Cake模型中,并且仍然有很好的ajax表单,我可以通过提取Model :: validationErrors并将它们添加到json响应来验证。我不关心表单是否为ajax,我只是不能应用我的客户端javascript,表单和服务器正常通信。
问题:许多控制器操作依赖于Controller :: redirect()。通过重写redirect(),尝试beforeRedirect()等,我找不到在ajax请求期间将重定向转换为JSON响应的可靠方法,这将指示类似'redirectUrl'=>的内容。 'foo'以便我的客户端(在浏览器ajax的情况下)可以使用javascript位置重定向将用户转发到新网址。
我认为我已经开始工作,但意识到未经授权的用户有权访问运行受保护的资源,尽管没有看到他们的输出。
答案 0 :(得分:0)
您可以使用带有两个键的json数组,例如
$json['status'] => 'success',
$json['url'] => 'router::url ("/",array("controller" => "yourcontroller",
"action" => "youraction"))';
// url where you want redirect after some processing
return json_encode($json);
//在您的脚本中发送了ajax请求:
if(json['status'] == 'success'){
window.location.href = json['url'];
}