2015-09-07 48 views
0

我使用了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')); 

?> 
+0

查看此wiki:http://www.yiiframework.com/wiki/388/ajax-form-submiting-in-yii/ – Criesto

+0

您是否在瀏覽器上進行了調試(Chrome - 檢查元素/網絡),以便請求不會再次到達服務器? –

+0

@RobertGabriel我使用檢查元素檢查了調試。有時它觸發一次有時不止一次。 –

回答

0

海的朋友我發現這個問題的解決方案。
我在這裏分享答案,以供進一步參考。

出現此問題是因爲每次使用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')); 

感謝您對所有您的支持