0

我正在尝试使用 CakePHP 2.1 框架、jQuery 和 Cake 的 JsHelper 设置邀请请求页面,以便提交用户电子邮件,然后发出响应。理想情况下,我希望在电子邮件成功提交后让表单淡出,不幸的是,当使用“成功”或“完成”回调时,即使遇到验证错误,它也会淡出。

我的 view.ctp 代码:

<?php $this->Js->get('#InvitationRequestAddForm'); ?>
    <?php $this->Js->event(
        'submit',
        $this->Js->request(
            array(
                    'controller'=>'InvitationRequests',
                    'action'=>'add'
            ),
            array('async' => true,
                'method' => 'POST',
                'dataExpression'=>true,
                'update' => '#invitationStatus',
                'complete' => "$('#InvitationRequestAddForm').fadeOut();",
                'data'=> $this->Js->serializeForm(
                    array(
                        'isForm' => true,
                        'inline' => true
                    )
                )
            )
        )
    ); ?>

我的控制器代码:

if($this->RequestHandler->isAjax()) 
    {
        if ($this->request->is('post')) 
        {
            $this->InvitationRequest->create();
            if ($this->InvitationRequest->save($this->request->data)) 
            {
                $this->set('alert_state', 'alert-success');
                $this->set('message', '<strong>Hang Tight!</strong> We have your request and we are working hard to approve as soon as possible!');
            } 
            else 
            {
                $this->set('alert_state', 'alert-error');
                $this->set('message', '<strong>Uh Oh!</strong> Something went wrong, check your email address and please try again.');
            }
        } 
    }

非常感谢任何帮助/建议!

4

1 回答 1

0

首先,文档complete为jquery中的选项指定了这个

请求完成时要调用的函数(在执行成功和错误回调之后)。

因此,无论是成功还是错误,它都会被调用。您需要complete使用successand 更改它(如果您愿意(但推荐))error以执行您想要的 fadeOut,因为complete将始终在 ajax 调用之后执行。

现在,另一件事。您必须记住,即使save控制器中的 有验证错误并且没有保存,ajax 调用也会成功。为什么?因为与动作的连接会很好,并且控制器中没有可怕的错误。因此,在successajax 调用的函数中,您需要检查alert-state变量,如果是alert-success,则执行 fadeOut,否则按照您的意愿处理错误。

于 2013-07-02T19:27:52.420 回答