当在yii中使用ajax时,数据被保存两次到数据库

时间:2015-09-07 06:25:54

标签: php ajax yii

我使用ajax来保存表单。但是当我保存数据时,数据会多次保存到数据库中。
我在这里分享我的控制器和表格,请帮助我们。

控制器

public function actionCreate()
{
    $model=new Comments;

    // Uncomment the following line if AJAX validation is needed
     $this->performAjaxValidation($model);

    if(isset($_POST['Comments']))
    {
        $model->attributes=$_POST['Comments'];
        // echo '<pre>';print_r($model->attributes);die();
        $valid = $model->validate();

        if($valid){
            if($model->save()){
            echo CJSON::encode(array(
                'status'=>'success'
                ));
        }
        }else{
            $error =CActiveForm::validate($model);
            if($error != '[]')
                echo $error;
            Yii::app()->end();
        }
    }
    // $this->render('create',array(
    //  'model'=>$model,
    // ));
}

_form 我这里只给出了ajax方法来保存

<?php
    echo CHtml::ajaxSubmitButton('Save',CHtml::normalizeUrl(array('Comments/create','render'=>true)),
        array(
            'dataType'=>'json',
            'type'=>'post',
            'success'=>'function(data){
                $("#Comments_email").val("");
                $("#AjaxLoader").hide();

                if(data.status == "success"){
                $("#formResult").html("Comment Submitted");
                $("#formResult").css({"color":"red"})
                $("#comments-form")[0].reset();


                }else{
                    $.each(data, function(key, val){
                        $("#comments-form #"+key+"_em_").text(val);
                        $("#comments-form #"+key+"_em_").show();
                    });
                }
            }',

            'beforeSend'=>'function(){
                $("#AjaxLoader").show();
            }'
            ),array('id'=>'submit','class'=>'btn btn-success'));

?>

1 个答案:

答案 0 :(得分:0)

Hai朋友我找到了解决这个问题的方法 我在这里分享答案以供进一步参考。

出现此问题是因为每次使用ajaxSubmitbutton显示视图时,都会创建一个事件处理程序。 因此,解决这个问题的方法是在使用它之后销毁处理程序。

<强> _form
请在beforeSend()中添加一个undelegate(),如下所示

'beforeSend'=>'function(){
                    $(\'body\').undelegate(\'#submit\', \'click\');
                    $("#AjaxLoader").show();
                }'  

完整的代码将是这样的:

<?php
    echo CHtml::ajaxSubmitButton('Save',CHtml::normalizeUrl(array('Comments/create','render'=>true)),
        array(
            'dataType'=>'json',
            'type'=>'post',

            'success'=>'function(data){
                $("#Comments_email").val("");
                $("#AjaxLoader").hide();

                if(data.status == "success"){
                $("#formResult").html("Comment Submitted");
                $("#formResult").css({"color":"red"})
                $("#ajax-comments-form")[0].reset();


                }else{
                    $.each(data, function(key, val){
                        $("#ajax-comments-form #"+key+"_em_").text(val);
                        $("#ajax-comments-form #"+key+"_em_").show();
                    });
                }
            }',

            'beforeSend'=>'function(){
                $(\'body\').undelegate(\'#submit\', \'click\');
                $("#AjaxLoader").show();
            }'
            ),array('id'=>'submit','class'=>'btn btn-success'));  

感谢您的支持