CActiveForm和ajaxSubmitButton无法正常工作

时间:2015-04-02 09:28:55

标签: php yii

这是我在视图中的代码:

    <?php
    $form = $this->beginWidget('CActiveForm', array(
        'id' => 'swim-subscribe-form',
        'enableAjaxValidation' => true,
        'action'=>"/mycontroller/myfunction"
            ));
    ?>
    <?php 
          echo CHtml::ajaxSubmitButton('Save',array('/mycontroller/myfunction'),array(
         'type'=>'POST',
         'dataType'=>'post',
         'success'=>'js:function(data){
          }',
          ));
     $this->endWidget();
     ?>

这是我的控制者:

public actionMyFunction(){
        $model = new MyModel;
        $this->performAjaxValidation($model);
        if ($model->save()) {
          $this->redirect('/another_controller');
        }
}
protected function performAjaxValidation($model) {
        if (isset($_POST['ajax']) && $_POST['ajax'] === 'swim-subscriber-form') {
            echo CActiveForm::validate($model);
            Yii::app()->end();
        }
    }

此代码不知何故,它总是提交我的网址/mycontroller/myfunction。我的控制台上没有显示我通过ajax调用/mycontroller/myfunction。为什么?

UPDATE 这就是我生成的ajaxSubmitButton:

<input name="yt0" value="Save" id="yt0" type="submit">

这可以吗?

1 个答案:

答案 0 :(得分:0)

您的代码中有拼写错误。在视图文件中,表单的ID为
'id' => 'swim-subscribe-form',

但在ajax验证期间,您正在检查身份号 $_POST['ajax'] === 'swim-subscriber-form' // there is an extra R at the end of "subscriber"

因此,ajax验证永远不会运行,yii应用程序永远不会结束,并且它始终被视为提交。

修复表单ID-s,或从控制器中的ajax验证中删除ID检查:

if (isset($_POST['ajax']) && $_POST['ajax'] === 'swim-subscribe-form') { // this has to match with the form ID
    echo CActiveForm::validate($model);
    Yii::app()->end();
}

OR

if(Yii::app()->getRequest()->getIsAjaxRequest()) {
    echo CActiveForm::validate($model);
    Yii::app()->end();
}

如果您在页面上有多个表单(具有相同的操作),并且您不希望ajax验证每个表单或者ajax验证是否干扰其他ajax请求,则表单ID检查很有用行动。我很少在ajax验证期间检查表单ID。