我使用Auth组件。我有一个Ajax登录表单,我希望在没有页面刷新的情况下在表单下显示成功/失败消息。
但是当我提交表单时(使用jquery.form.js
):
$('#loginform').ajaxForm(function(data) {
alert(data);
});
如果成功,它会在警报中返回home.ctp
个内容,并在发生故障时返回登录表单的HTML代码!
我希望在$this->Auth->loginError
中收到alert(data)
。
这些是一些app_controller beforeFilter
设置:
function beforeFilter(){
$this->Auth->loginRedirect = false;
$this->Auth->logoutRedirect = false;
$this->Auth->loginError = __('Invalid e-mail or password.', true);
$this->Auth->autoRedirect = false;
$this->autoRender = false;
$this->render('login','ajax');
}
我使用loginRedirect来渲染一些逻辑并为jQuery进程创建一个JSON对象。
答案 0 :(得分:3)
您可以使用blogpost CakePHP Form Validation with Ajax Using jQuery 中的解决方案。
基本上,通过以下方式区分标准和 Ajax 请求:
if ($this->RequestHandler->isAjax()) { /*If it is an Ajax call*/ }
else { /* If it is a standard action request */ }
仍然需要将调试级别设置为0(Configure::write('debug',0)
)并使用 Ajax布局以不在{{1}中的标准 XHTML布局中输出数据}}
提交表单的调试如下所示:
/app/views/layouts/default.ctp
之后的输出是以JSON格式输出的:
Configure::write('debug', 0);
$this->layout = 'ajax';
if ($this->RequestHandler->isAjax()) {
if (!empty($this->data)) {
$this->Post->create();
$this->Post->set($this->data['Post']);
if($this->Post->validates()) {
if ($this->Post->save($this->data)) {
$message = __('The Post has been saved.', true);
$data = $this->data;
$this->set('success', compact('message', 'data'));
}
} else {
$message = __('The Post could not be saved. Please, try again.', true);
$Post = $this->Post->invalidFields();
$data = compact('Post');
$this->set('errors', compact('message', 'data'));
}
}
}