CakePHP:在Ajax登录表单下显示失败/成功消息

时间:2011-09-02 13:44:04

标签: ajax cakephp

我使用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对象。

1 个答案:

答案 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'));
            }
        }
    }