Solved Ajax & Jquery Populate

Hola a todos.

Estoy intentando insertar el plugin de jQuery Populate a través de un botón con AJAX.

El problema que tengo es que me da un 403, forbidden.

Es un formulario laaaaargo (80 campos aprox), sobre varios modelos, dividido en varios tabs.

El plugin me sirve para sacar datos de una base de datos ‘falsa’ y rellenar los campos apropiadamente. No sé si hay algo nuevo por ahí, pero lo usé hace tiempo y funcionaba bastante bien.

De esa forma puedo ver cómo pasan un montón de variables sin tener que meter los campos uno a uno.

Es mi sistema de testeo ‘manual’.

Tengo un botón (class="populator") en su create.php que activa la siguiente función, cuya misión es llamar a un action en el mismo controller, y preparar los datos en un multiarray para el form:


<script type="text/javascript">

	// populate form

	$(".populator").click(function(t){

		//alert($(this).attr('href'));

		t.preventDefault();		

		$.ajax({

		   type: "POST",

		   url: "<?php echo Yii::app()->createAbsoluteUrl('factura/populate'); ?>",

		 //  data: "name=John&location=Boston",

		   data: "figura="+$(this).attr('href'),		   

		   success: function(text){

alert(text);

// 			text = "(" + text + ");";

// 			try{var json = eval(text)}

// 			catch(err){

// 				alert('No parece un JSON valido!');

// 				alert(json);

// 				return false;

// 			}

// 

// 			$('#factura-form').populate(json);


		   }

		 });

/**/

	});// end populate function

</script>

factura/populate es una función que se encarga de hacer varios queries y prepararlos en el formato de array adecuado.

La función está funcionando bien en un prototipo ajeno al desarrollo. Lo he comprobado.

El problema que tengo es con la url, que me devuelve un 403 (prohibido).

He probado con cinco o seis formas distintas, hasta meterle la url a pelo, etc… No consigo dar con la clave.




url: "<?php echo Yii::app()->createAbsoluteUrl('factura/populate'); ?>",

url:"<?php echo Yii::app()->createUrl('factura/populate'); ?>",

url:'factura/populate',

url:'index.php?r=/factura/populate',

....



La función populate está en facturaController, y por el momento sólo llama a datos de cliente. Podría estar en cualquier sitio, pues no es del desarrollo estrictamente. Tan solo saca valores de unas tablas ‘falsas’ con datos mezclados ‘ficticios’, y en producción no saldrá…


	

        /**

	* Populate form Script

	*/

	public function actionPopulate()

	{

		$connection=Yii::app()->db;

		$sql = "SELECT 

		nombre, apellidos as apellido_1, apellido2 as apellido_2,

		tipo_doc as tipo_documento, nif AS num_documento, f_nac AS fecha_nacimiento,

		f_carnet_a AS fecha_licencia,clase_permiso AS tipo_licencia, profesion, sexo, estado_civil,

		CONCAT_WS(', ',domicilio,num_dir, piso_dir) AS direccion, localidad, provincia, cod_post AS codigo_postal,

		tlf_2 AS tlf_movil, tlf_1 AS tlf_fijo, fax, email

		FROM populate_cliente ORDER BY RAND() LIMIT 0,4";

	/**/

		$cliente = Yii::app()->db->createCommand($sql)->queryAll();		

	}

Para preparar un array de datos anidados largo tengo que hacer varias consultas y ‘preparar’ los datos adecuadamente. Por ahora sólo saco los datos de cuatro clientes con los que después ‘mezclo’ el resultado de cliente, en éste caso. No necesita pasar ningún dato. Sólo llama a la función que debe realizar los queries y preparar el array.

El caso es que no sé ‘llegar’ a la función populate del controller:


Failed to load resource: the server responded with a status of 403 (Forbidden) http://mylocalhost/index.php/factura/populate

No sé si el index.php (‘ocultado’ en el server) tendrá que ver.

Gracias anticipadas por la respuesta.

Un saludo.

Solucionado. Solved.

En mi controller, en rules, no tenía incluída la función populate.

Al incluírla sí que puede acceder a la función.

La pongo en all users, aunque debería estar en admin.




	/**

	 * Specifies the access control rules.

	 * This method is used by the 'accessControl' filter.

	 * @return array access control rules

	 */

	public function accessRules()

	{

		return array(

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

				'actions'=>array('index','view', 'populate'), // AQUI HE INCLUIDO populate

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

			),

Ahora me pongo con el query y demás.