代码在Ajax请求中运行两次

时间:2013-04-19 19:31:51

标签: php yii

if(!$validate)区块中mail功能真正运行一次。

我想知道为什么在if($validate)mail函数运行两次!!! ???

此问题仅在Ajax请求中以及第一次view page加载时引发。之后if($validate)块运行一次,其他请求if($validate)块真正运行一次。

public function  actionCEmail()
{
    $model = $this->loadModel(Yii::app()->user->id);
    $model->scenario = 'CEmail';

    if(isset($_POST['User'])){
        $model->attributes = $_POST['User'];
        $validate=$model->validate();

        if(Yii::app()->request->isAjaxRequest){
            if(!$validate) {
                $to='test@example.ds';
                $subject='test';
                $message='this is test';
                mail($to,$subject,$message);
                Yii::app()->end();
            }
            if($validate){
                $to='test@example.ds';
                $subject='test';
                $message='this is test';
                mail($to,$subject,$message);
                Yii::app()->end();
            }
        }
    }

    if(Yii::app()->request->isAjaxRequest)
        $this->renderPartial('_cemail',array('model'=>$model),false,true);
    else
        $this->render('update',array('model'=>$model,'form'=>'_cemail'));
}

如果您需要任何信息,请告诉我。

2 个答案:

答案 0 :(得分:0)

已解决if($validate)块执行两次的原因是:一次时进行Ajax验证,再次时点击ajaxSubmitButton用于提交表单。

有没有办法区分这两者?为了理解什么时候点击ajaxSubmitButton?或其他事情?

答案 1 :(得分:0)

if(Yii::app()->request->isAjaxRequest)
{
$error=CActiveForm::validate(array($model,$profile));
if($error!='[]') {
$to='test@example.ds';
                $subject='test';
                $message='this is test';
                mail($to,$subject,$message);
Yii::app()->end();
        }}
if(isset($_POST['User'])){
        $model->attributes = $_POST['User'];
$validate=$model->validate();
if($validate){
                $to='test@example.ds';
                $subject='test';
                $message='this is test';
                mail($to,$subject,$message);
                Yii::app()->end();
            }}

尝试制作类似的东西。