Ajax Action Не Срабатывает

Добрый день. Заранее спасибо за идеи по решению проблемы.

JS-код вызывается без ошибок, но всегда при изменении чекбокса выводится AJAX error.

Похоже, вызов action’а блокируется, хотя неAJAX-овские действия index, view, … работают.

Принципиально так же построенный код в другом контроллере и другом представлении срабатывает нормально.

Отличия от успешно работающего контроллера, которое я вижу, это то, что в неработающем представлении имеется форма, у которой ‘enableAjaxValidation’=>true. Однако даже при ‘enableAjaxValidation’=>false все равно не работает код из action.

В контроллере:


public function filters()

	{

		return array(

			'accessControl', // perform access control for CRUD operations

			'postOnly + delete', // we only allow deletion via POST request

			'ajaxOnly + r_users + r_bidtypes',

		);

	}


	public function accessRules()

	{

		return array(

			array('allow',  // allow all users to perform 'index' and 'view' actions

				'actions'=>array(),

				'users'=>array('*'),

			),

			array('allow', // allow authenticated user to perform 'create' and 'update' actions

				'actions'=>array(),

				'users'=>array('@'),

			),

			array('allow', // allow admin user to perform 'admin' and 'delete' actions

				'actions'=>array('index','view','create','update','users','remove','revoke','deleted','r_users','r_bidtypes','delete','admin'),

				'users'=>array('admin'),

			),

			array('deny',  // deny all users

				'users'=>array('*'),

			),

		);

	}

...

	public function actionR_users()

	{

 $response = array('message'=>'ОК');


		echo json_encode($response);

	}

Во view:


Yii::app()->clientScript->registerScript('checkboxes', "

	$(function() {


  	$('input:checkbox[id^=\"chtp_\"]').click(function()

	{

		r = $('#r').val();

		p = $('#p').val();

		t = $('#t').val();

		c = ($('#chtp_'+t).is(':checked'))?'checked':''; 

//проверено - все переменные r, p, t, c инициализируются нормально 

		$.getJSON('".$this->createUrl('roles/r_users')."', {\"t\":t,\"p\"<img src='http://www.yiiframework.com/forum/public/style_emoticons/default/tongue.gif' class='bbc_emoticon' alt=':P' />,\"r\":r,\"c\":c})

			.done(function(msg) 

				{

					alert(msg['message']);

				})

			.fail(function() 

				{

					alert('AJAX error!!!');

				});

	}) //input:checkbox[id^=\"chk_\"]

...

});


");

Перенаправьте аппликейшн лог в файл (если еще не) и почитайте, что пишут.

А что показывает консоль? Нет ли там access denied или internal server error?

Выведите ошибку аякса в консоль:




.fail(function(xhr, textStatus, error) 

{

   console.log(xhr.statusText);

   console.log(textStatus);

   console.log(error); 

   alert('AJAX error!!!');

});



В логе следующее (теперь вызываю http://localhost/roles/update/id/24, раньше было http://localhost/roles/update/24 - в логах эффект вроде бы одинаковый):




...

2013/11/21 12:01:55 [error] [exception.CHttpException.404] exception 'CHttpException' with message 'Невозможно обработать запрос "24".' in /var/www/framework/web/CWebApplication.php:286

Stack trace:

#0 /var/www/framework/web/CWebApplication.php(141): CWebApplication->runController('24')

#1 /var/www/framework/base/CApplication.php(180): CWebApplication->processRequest()

#2 /var/www/index.php(13): CApplication->run()

#3 {main}

REQUEST_URI=/roles/r_bidtypes?t=11&p=1&r=24&c=checked

HTTP_REFERER=http://localhost/roles/update/id/24

---

Хыхы, во прикол.

&r=24

Уж не идет ли пересечение со встроенной переменной Yii, которая /index.php?r=controller/action

А переназовите-ка параметр.

Вместо r = $(’#r’).val(); попробуйте, скажем, r1 = $(’#r’).val(); ну и дальше по коду тоже поменяйте.

Наверное, это из-за отсутствия доступа к AJAX-овским action’ам (у меня их два в этом контроллере - r_users и r_bidtypes - и ведут себя одинаково)


[11:06:48.381] "Not Found"

[11:06:48.382] "error"

[11:06:48.382] "Not Found"

Ха! Точно! заработало!!! Спасибо!

Вот это поворот.

Ну, теоретически, если мешает - можно вот эту штуку сконфигурять.

А вообще, я как-то даже и не проверял, если urlManager работает в режиме path - он все равно на переменную смотрит?

Ну ссылки вида index.php?r=controller/action продолжают работать.

Да, точно.

Может, тогда имело бы смысл дефолтной переменной дать какой-нибудь дикое название. Ну, там, _r.

Один фиг же урл некрасивый.