我正在尝试使用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.');
}
}
}
非常感谢任何帮助/建议!
答案 0 :(得分:0)
首先,the docs为jquery
中的complete
选项指定此项
请求完成时要调用的函数(执行成功和错误回调之后)。
因此,无论是成功还是错误,它都会被调用。您需要使用complete
更改success
并且(如果您需要(但建议))error
来执行您想要的fadeOut,因为complete
将始终在ajax之后执行调用
现在,另一件事。你必须记住,即使控制器中的save
有验证错误而且没有保存,ajax调用也会成功。为什么?因为带动作的连接将是正常的,并且控制器中没有可怕的错误。因此,在ajax调用的success
函数中,您需要检查alert-state
变量,如果它是alert-success
,请执行fadeOut,否则请根据需要处理错误。