在Yii中使用ajax提交表单

时间:2014-02-10 14:38:11

标签: php jquery ajax forms yii

我被困住了,任何帮助都会受到赞赏。

我有一个带有ajax链接的表单。

表单链接如下:

<div class="row buttons">
        <?php echo CHtml::Button('SUBMIT AJAX',array('onclick'=>'send();')); ?> 
</div>

函数send包含以下内容:

function send()
 {

   var data=$("#comment-form").serialize();



  $.ajax({
   type: 'POST',
    url: '<?php echo Yii::app()->createAbsoluteUrl("post/ajax"); ?>',
   data:data,
    success:function(data){
                alert(data); 
              },
    error: function(data) { // if error occured
         alert("Error occured.please try again");
         alert(data);
    },

  dataType:'html'
  });

}

控制器中的ajax操作包含以下内容:

public function actionAjax() {

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

            if($model->validate())
            {
           //$model->save();

           print_r($_REQUEST);
           return;
            }
        }
        $this->render('comment',array('model'=>$model));

 }
}
?>

print_r输出显示所有字段都已填写:

Array
(
    [Comment] => Array
        (
            [post_id] => 2
            [author] => sss
            [email] => sss@dldksl.com
            [url] => http://www.mysite.com
            [content] => sksjdjh 
            [status] => 1
        )

)

当我取消注释$model->save()时,我会收到完整性错误post_id cannot be null

似乎我的模型是空的,如何将模型设置为$_REQUEST

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

<?php $form=$this->beginWidget('CActiveForm', array(
                                  'id'=>'customer-form-guest',
                                  'enableClientValidation'=>true,
                                  'clientOptions'=>array(
                                  'validateOnSubmit'=>true,

                                        'afterValidate' => 'js:function(form, data, hasError) { 
              if(hasError) {
                  return false;
      }
              else
              {
         // return true;  it will submit default way
                   ajaxSubmitHappen(form, data, hasError); and it will submit by ajax function 
               }
           }',
'htmlOptions'=>array('role'=>"form"))); ?>

现在是ajax sub,mit功能

function  ajaxSubmitHappen(form, data, hasError)
{
    if(!hasError)
{

                                 $.ajax({

                                    "type":"POST",
                                    "url":"<?php echo $url;  ?>",
                                    "data":form.serialize(),
                                    "success":function(data){
                                     },

                                  });
     }
      else
    { 
       alert('error');
     }

通过这种方式,您可以通过ajax ....

提交表单