CActiveForm e ajaxSubmitButton não funcionam

Este é o meu código em vista:

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

Este é o meu controlador:

 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(); } } 

Este código de alguma forma, sempre faz um envio do meu url /mycontroller/myfunction . Não mostra no meu console que eu chamo o /mycontroller/myfunction através do ajax. Por quê ?

UPDATE Isto é o que gerou meu ajaxSubmitButton:

  

Está bem?

Você tem um erro de digitação em seu código. No arquivo de exibição, a ID do formulário é
'id' => 'swim-subscribe-form',

Mas durante a validação do ajax você está verificando a identificação
$_POST['ajax'] === 'swim-subscriber-form' // there is an extra R at the end of "subscriber"

Portanto, a validação do ajax nunca é executada, o aplicativo yii nunca termina e é sempre considerado como um envio.

Corrija os IDs do formulário ou remova a verificação de identificação da validação do ajax no controlador:

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

OU

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

A verificação da identificação do formulário é útil se você tiver vários formulários em uma página (com a mesma ação), e você não deseja que ajax valide cada uma delas ou se a validação ajax interfere com outras solicitações do ajax para a mesma ação. Eu raramente verifico a identificação do formulário durante a validação do ajax.