CAutoComplete no funciona correctamente.

Hola

en el fichero _form tengo lo siguiente:


		

     <div class="row">

          <?php echo $form->labelEx($model,'idprovincia');?>

          <?php $this->widget('CAutoComplete', array( 

             //'model'=>$model,

             'name'=>'nombre_provincia', 

             'url'=>array('provincias/findProvincia'), 

             'max'=>10, //specifies the max number of items to display

             'minChars'=>2, 

             'delay'=>100, //number of milliseconds before lookup occurs

             'matchCase'=>false, //match case when performing a lookup?

             'htmlOptions'=>array('size'=>'20'),  

             'methodChain'=>".result(function(event,item){\$(\"#idprovincia\").val(item[1]);})",

             ));

			echo $form->hiddenField($model,'idprovincia',array('id'=>'idprovincia'));

			echo $form->error($model,'idprovincia'); ?>

        </div>



en el controller tengo:





	public function actionfindProvincia() {

       $q = $_GET['nombre_provincia'];

       if (isset($q)) {

           $criteria = new CDbCriteria;

    		   

           //condition to find your data, using q as the parameter field

		   $criteria->condition = "nombre LIKE '%". $q ."%'";

           //$criteria->params = array(":sterm"=>"%$q%");

           $criteria->order = 'nombre'; // correct order-by field

           $criteria->limit = 10; // probably a good idea to limit the results

           // with trailing wildcard only; probably a good idea for large volumes of data

           $criteria->params = array(':q' => trim($q) . '%'); 

           $Provincias = Provincias::model()->findAll($criteria);

           if (!empty($Provincias)) {

			   $returnVal = '';

               $out = array();

               foreach ($Provincias as $p) {

                   $out[] = array(

                      // expression to give the string for the autoComplete drop-down

                       'label' => $p->nombre,  

                       'value' => $p->nombre,

                       'id' => $p->idprovincia, // return value from autocomplete

                    );

                }

              echo CJSON::encode($out);

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

            }

        }

    }




si en el navegador pongo


localhost/pruebas/index.php?r=provincias/findProvincia&nombre_provincia=Madrid

me devuelve un resultado de la busqueda.

Cuando escribo en la casilla que he definido con el CAutoComplete hace como que busca pero no retorna nada.

Si la linea del controller que tiene




$q = $_GET['nombre_provincia']; 



la cambio por




$q = 'Madrid';



el CAutoComplete me devueve un resultado.

El problema creo que esta en que el controller no toma bien el valor que envia el _form y no se cual de los 2 esta mal.

Espero vuestra ayuda.

Un Saludo

Hola.

Me respondo a mi mismo.

El _form se ha quedado como sigue:




	<div class="row">

          <?php 

		  echo $form->labelEx($model,'provincia_id');

		  ?>	

          <?php 	

			$this->widget('zii.widgets.jui.CJuiAutoComplete', array(

				'name'=>'busca_provincia',

				'value'=>$model->provincia->nombre,

				'sourceUrl'=>$this->createUrl('provincias/BuscaProvincia'),

				// additional javascript options for the autocomplete plugin

				'options'=>array(

				        'showAnim'=>'fold',

						'beforeSend' => 'js:function(){        

                                        $("#loading").html("LOADING IMAGE HERE");               

                                     }',

						'complete' => 'js:function(){

                                        $("#loading").html("");

                                   }',

						'select' => 'js:function(event, ui){ 

									// alert(ui.item.id+" "+ui.item.label + " "+ui.item.value);

									jQuery("#provincia_id").val(ui.item["id"]); 

									}'


					),

				));

			echo $form->hiddenField($model,'provincia_id',array('id'=>'provincia_id'));

			echo $form->error($model,'provincia_id'); 


		  ?>

	</div>



y el Controller asi:





	public function actionBuscaProvincia() {

       $q = $_GET['term'];


       if (isset($q)) {

           $criteria = new CDbCriteria;

           // condition to find your data, using q as the parameter field

		   $criteria->condition = "nombre LIKE '%". $q ."%'";

           $criteria->order = 'nombre'; // correct order-by field

           $criteria->limit = 10; // probably a good idea to limit the results

           // with trailing wildcard only; probably a good idea for large volumes of data

           //$criteria->params = array(':q' => trim($q) . '%'); 

           $Provincias = Provincias::model()->findAll($criteria);


           if (!empty($Provincias)) {

			   $returnVal = '';

               $out = array();

               foreach ($Provincias as $p) {

                   $out[] = array(

                      // expression to give the string for the autoComplete drop-down

                       'label' => $p->nombre,  

                       'value' => $p->nombre,

                       'id' => $p->id, // return value from autocomplete

                    );

                }

              echo CJSON::encode($out);

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

            }

		}

	}




Gracias a todos.