Не работает Ajax валидация форм

Добрый день!

Есть форма


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

  'id'=>'user-form',

  'enableAjaxValidation'=>true,

)); ?>

При ее заполнении не происходит интерактивная валидация.

Смотрю в FireBug, запрос POST проходит, но ему возвращается полная HTML страница.

Запрос:




POST http://192.168.1.100/index.php/user/register

User[usr_email]	

User[usr_login]	

User[usr_password]	

User[usr_password_repeat]	

User[verifyCode]	

ajax	user-form

Ответ:


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru" lang="ru">

<head>

	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

	<meta name="language" content="ru" />


	<script type="text/javascript" src="/assets/96461aff/jquery.js"></script>

<script type="text/javascript" src="/assets/96461aff/jquery.yiiactiveform.js"></script>

<title>

...

...

...

</script>

</body>

</html>



В контроллере есть функция

Но она, похоже, даже не запускается т.к. вставлял в нее echo ‘test’ (и в начало функции и в if) но оно в ответе от сервера не приходит.

Возможно не раскоментирована строчка в акшене actionCreate() и actionUpdate()


		// Uncomment the following line if AJAX validation is needed

		$this->performAjaxValidation($model);

Да, все получилось. Спасибо.

Только теперь другая проблема.

На странице с формой есть капча.

Без AJAX валидации все работает верно.

А вот с ней - пишет "неправильный код потверждения".

Такое чувство, что капча обновляется внутри yii скриптов при AJAX проверке, но не обновляется на самой странице.

Как с этим бороться?

тоже интересует

Да, вопрос интересный. Я довольно давно решил так:




// Добавить в rules() :

array('verifyCode', 'captcha', 'on'=>'insert'),

array('verifyCode', 'activeCaptcha', 'on'=>'active'), // Во время AJAX запроса не забудьте установить сценарий для модели


public function activeCaptcha()

{

    $code = Yii::app()->controller->createAction('captcha')->verifyCode;

    if ($code != $this->verifyCode)

        $this->addError('verifyCode', 'Неправильный код проверки.');

}



Сейчас уже не вспомню результатов моих исследований исходного кода капчи, но пришел я к этому варианту, и он работает :)

Теперь одному пользователю, сколько бы он форм с капчей не запонял, выдается одна и та же капча. Боты будут рады((((

Почитайте эту тему: http://www.yiiframework.com/forum/index.php?/topic/10478-капча-тупит

Итак, проблема решена! Спасибо andy_s за идею!

Доработав валидатор activeCaptcha получил следующее:


public function activeCaptcha() {

	$code = Yii::app()->controller->createAction('captcha')->getVerifyCode();

	if ($code != $this->verifyCode)

		$this->addError('verifyCode', 'Неправильный код проверки.');

	if (!(isset($_POST['ajax']) && $_POST['ajax']==='user-form'))

		Yii::app()->controller->createAction('captcha')->getVerifyCode(true);

}

Теперь при каждой валидации проверяется, совпадает ли код проверки с введенным пользователем,

а если запрос поступил от активной формы посредством AJAX, то код после этого не обновляется!

Итого: имеем капчу, которая может правильно работать в активных формах с AJAX валмдацией.