Ajax form

put this into your controler




public $form;

public $form_model;


public function actionKontakti()

        {


        $model= new KontaktiModel;

        $this->form_model  = $model;     

        

                $this->performAjaxValidation($this->form_model);


                if(isset($_POST['KontaktiModel']))

                {

                        $this->form_model->attributes=$_POST['KontaktiModel'];

                        if($this->form_model->validate())

                        {

                                $headers="From: {$model->email}\r\nReply-To: {$model->email}";

                                mail(Yii::app()->params['adminEmail'],"Poslan je novi upit sa etvrtka.com",$this->form_model->poruka,$headers);

                                Yii::app()->user->setFlash('kontakt','Vaš upit je usješno poslan.');

                               $this->refresh();

                        }

                }

               

            

       

        $this->render('kontakti' ,array('model'=>$this->form_model));

        }




         protected function performAjaxValidation()

        {

         

            if(isset($_POST['ajax']) && $_POST['ajax']==='KontaktForm')

            {

                echo CActiveForm::validate($this->form_model);

                Yii::app()->end();

            }

        }

          

      

        public function zapcniwiget(){

	

	$this->form = $this->beginWidget('CActiveForm', array(

       'id'=>'KontaktForm',

       'enableAjaxValidation'=>true,

      'clientOptions' => array('validateOnSubmit' => true),

       //'focus'=>array(ime,prezime,email,telefon,poruka,verifyCode)

        )); 

	

	}

	public function form_errors(){

	

	$optionNames = array(


		'validationDelay' => '200',

		'validateOnChange' => true,

		'validateOnType' => false,

		'hideErrorMessage' => false, //true false

		'inputContainer' => '',//undefined

		'errorCssClass' => '',//undefined

		'successCssClass' => '',//undefined

		'validatingCssClass' => '',//undefined

		//'beforeValidateAttribute' => '',//undefined

		//'afterValidateAttribute' => '',//undefined

		

	); //if this need to be foreach fild,change it

	

	

	echo $this->form->error($this->form_model,'ime',$optionNames,$enableAjaxValidation=true); 

	echo $this->form->error($this->form_model,'prezime',$optionNames,$enableAjaxValidation=true);

        echo $this->form->error($this->form_model,'email',$optionNames,$enableAjaxValidation=true); 

	echo $this->form->error($this->form_model,'telefon',$optionNames,$enableAjaxValidation=true); 

	echo $this->form->error($this->form_model,'poruka',$optionNames,$enableAjaxValidation=true); 

	echo $this->form->error($this->form_model,'verifyCode',$optionNames,$enableAjaxValidation=true); 

	

	} 

	







your form model my is




class KontaktiModel extends CFormModel

{

	public $ime;

	public $prezime;

	public $email;

	public $poruka;

	public $telefon;

	public $verifyCode;

	public function rules()

	{

		return array(

			// name, email, subject and body are required

			array('ime,prezime, email,  poruka,telefon', 'required'),

			// email has to be a valid email address

			array('email', 'email'),

			// verifyCode needs to be entered correctly

			array('verifyCode', 'captcha', 'allowEmpty'=>!extension_loaded('gd')),

		);

	}

}




and the view of the kontakt form







<?php  $this->zapcniwiget(); ?>

<?php echo $this->form->labelEx($this->form_model,'ime'); ?></div>

<?php echo $this->form->textField($this->form_model,'ime',array('class' => 'none')); ?>

<?php echo $this->form->labelEx($this->form_model,'prezime'); ?>

<?php echo $this->form->textField($this->form_model,'prezime',array('class' => 'none')); ?>

<?php echo $this->form->labelEx($this->form_model,'email'); ?></div>

<?php echo $this->form->textField($this->form_model,'email',array('class' => 'none')); ?>

<?php echo $this->form->labelEx($this->form_model,'telefon'); ?>

<?php echo $this->form->textField($this->form_model,'telefon',array('class' => 'none')); ?>

<?php echo $this->form->labelEx($this->form_model,'poruka'); ?>

<?php echo $this->form->textArea($this->form_model,'poruka',array('class' => 'none')); ?>

<?php if(extension_loaded('gd')): ?>

<?php $this->widget('CCaptcha',array('buttonLabel' => 'Novi Kod') ); ?></div>

<?php echo $this->form->textField($this->form_model,'verifyCode',array('class' => 'none')); ?><?php endif; ?>

<?php $this->form_errors();?>

<?php echo CHtml::submitButton('Submit',array('class' => 'posaljigumb', 'value' =>'')); ?>

<?php if(Yii::app()->user->hasFlash('kontakt')): ?>

<?php echo Yii::app()->user->getFlash('kontakt'); ?>

<?php endif; ?><?php $this->endWidget(); ?>



you can modify for your needments, and walla ajax form works :)

What does this version add to the default behavior?