Insertar variable javascript en CHtml::ajax

Hola foro,

Como le hago para que se inserte en la URL del Ajax una variable dentro del script ?




<script type="text/javascript">

 ...

 function addContacto(idCliente)

 {

   alert(idCliente);  // <<<< ----- Muestra p.ej: 4, el id que le mando

   <?php

     echo CHtml::ajax(array(

       'url'=>array('contactos/createRel&id=4'),  // <<<< ---- Debe ir idCliente ??

       'data'=> "js:$(this).serialize()",

       'type'=>'post',

       'dataType'=>'json',

       'success'=>"function(data)

       {

         if (data.status == 'failure')

         {

           $('#dialogCliente div.divForForm').html(data.div);

           $('#dialogCliente div.divForForm form').submit(addContacto);

         }

         else

         {

           $('#dialogCliente div.divForForm').html(data.div);

           $('#Rfqs_id_contacto').val(data.id);

           $('#nombre-contacto').val(data.contacto);

           setTimeout(\"$('#dialogCliente').dialog('close') \",3000);

         }

       } ",

    ))

  ?>;

  return false; 

 }

...

</script>



Aquí, cómo le pongo la variable que recibo en la función ?




   'url'=>array('contactos/createRel&id=4'),  // <<<< ---- Debe ir idCliente ??



Gracias por la ayuda.

Hola!

Lo pudiste solucionar?

Dentro de tu url sería mejor que en vez de array(URL), le indicaras lo siguiente:




'url'=>Yii::app()->createURL('contactos/createRel',array('id'=>4)),



De esta manera identificas mas fácil el paso de parámetros en la misma url lo puedes usar via post con php normal y con ajax al igual te aparece el parametro que estas enviando te recomiendo que programes con el debbugeador de firefox o si sabes usar el del chrome con ese y asi veas como pasan las variables, aunque te recomiendo que crees tus métodos en un js utilices javascript en metodos o con ajax en el mismo archivo javascript, yii cuanta con una gran facilidad de manejo de jquery te pondre un ejemplo con un combo




echo CHtml::dropDownList(

					'POST[NAME]', 

//lo que pongo como post es lo que siempre viaja en el post asi ese texto el que este el name ya sabes a lo que //me refiero

					$model->variable,

//$model->variable es la variable que recibira el combo de acuerdo a la DB

 

					array(1=>"Valor",1=>"Valor2"),

					array('empty'=>array(NULL=>'-- Seleccione --'),

						

//iniciemos con javascript o ajax de acuerdo a como lo programes en tu .js


'onChange'=>"Combos({'id':'Prueba_id_txt',

								url:'".Yii::app()->createUrl('Controlador/Método a viajar',array('tipo'=>3))."'})"

					)

		);


/*

Nota que estoy usando la propiedad OnChange de html en ese combo cuando seas seleccionado has esto y despues de la asignación indico un método llamado "COMBOS", este es el nombre de mi método a usar en mi archivo .js, ahora fijate que tengo una variable que se llama id y otra que se llama url y las tengo dentro de llaves, esto es paso de parametros mediante arreglos en javascript

*/


//Código javascript usando jquery

function Combos(params)

{


//el método recibe una variable que se llama params que ahi trae mi arreglo enviado desde el combo para poder //obtener las variables enviadas del combo solo es necesario con esto

//params['miVariable'] por ejemplo


var idCombo = document.getElementById(params['id']);


//en idCombo ya tengo mi id enviado de ese combo, ahora fijate como obtengo la url a viajar

	

	if (params['url'] != undefined) {

		jQuery.ajax({'type':'POST',

					 'url':params['url']

		});

	}


//Con eso ya tienes tu id del combo mas tu url pero si quieres concatenar en js un id a pasarla por la url es //con el simbolo +


        if (params['url'] != undefined) {

		jQuery.ajax({'type':'POST',

					 'url':params['url']+'&id='+idCombo

		});

	}

}



Si te fijas ya pasamos dos variables en un arreglo por un metodo llamado Combos, depende de como lo indiques para hacerlo generico osea que siempre sea reutilizable y dinámico y no tengas que andar creando varios métodos, esto aplica mas fácil a los datos enviados desde indicaciones de propiedades de html pero al iwal la manera que lo intentas hacer es correcta pero falta definirla aún mas nada mas es como pases las cosas y dentro del metodo al que va a viajar que deseas que haga, ojala te sirve el ejemplo saludos.

No, aun no… ::)

Hola, gracias por tus indicaciones pero fijate que ya tengo solucionado todo el asunto de enviar y recibir, si yo dejo el ‘4’ fijo en la acción recibo el ‘4’ y lo puedo procesar y trabajar con él, mi punto es antes… ya que ‘4’ en este código que pongo es ‘una constante’ eso no es lo que necesito.

Desde el boton que ejecuta la llamada a la función de js: addContacto(idCliente) le estoy pasando en idCliente el id del cliente seleccionado en un dropbox; si dentro de la función addContacto(idCliente) yo hago un: alert(idCliente) puedo ver que ya recibi en js correctamente el id y lo tengo en esa variable, la variable es la que necesito mandar en la URL a la accion, pero,

cómo ?.. cómo meto una variable de js en mi llamada por ajax, dentro de mi código php?

una vez teniendo esto todo lo demás funciona pues ya lo comprobé mandando constantes, por ejemplo el ‘4’.

Saludos.

No sé si sirve para este caso, pero mira: http://www.yiiframework.com/wiki/72/cjuidialog-and-ajaxsubmitbutton

Saludos!

Hola IRCSASW

Por si aun no resuelves tu problema… quizas esto te ayude…




function addContacto(idCliente)

 {

   alert(idCliente); // verificas que se envio el id

   var url = "<?php echo Yii::app()->createURL('contactos/createRel', array('id'=>'')); ?>"; // creas la url

   <?php

     echo CHtml::ajax(array(

       'url'=>'js:url+idCliente', // ahora simplemente unes la url con el parametro enviado <img src='http://www.yiiframework.com/forum/public/style_emoticons/default/smile.gif' class='bbc_emoticon' alt=':)' />

       'data'=> "js:$(this).serialize()",

       'type'=>'post',

       'dataType'=>'json',

       'success'=>"function(data)

       {

         console.log(data);

       } ",

    ))

  ?>;

  return false; 

}

De hecho aunque esto funcione, no se me hace la mejor opcion para hacerlo… creo que sería mucho mas claro escribir javascript puro que hacerlo con yii… entonces recomendaria utilizar la url desde el enlace para dejar el codigo mas bonito aun… seria tomar el link o enlace y pasarlo a ajax… y ya no tendrias que utilizar funtion(params) …

por ejem…


<?php echo CHtml::link('Click para ver el resultado',Yii::app()->createURL('contactos/createRel', array('id'=>2)), array('class'=>'enlace'));?>

<?php

Yii::app()->clientScript->registerScript('jquery.dropdownflyer','

	$(".enlace").click(function(e){

		e.preventDefault();

		$.ajax({

			url:$(this).attr("href")

		});

	});

');

?>

Saludos

Pudiste darle solucion a este problema? Justamente los otros dias me sucedio exactamente la misma pregunta y lo unico que hice es generar funciones concatenando el ID, para que cada uno fuera diferente, esto no lo veo optimo pero no encontre solucion de pasar variables javascript a php…

Dejando aparte que si ‘idcliente’ es un campo del formulario, ya te esta llegando por post gracias al serialize, la respuesta que pides puede ser:


alert(idCliente);  // <<<< ----- Muestra p.ej: 4, el id que le mando

   <?php

     echo CHtml::ajax(array(

       'url'=>array('contactos/createRel').'id='.'js:idCliente',  // <<<< ---- Debe ir idCliente ??

       'data'=> "js:$(this).serialize()",

       'type'=>'post',







Lo unico que, por este sistema, pierdes la generacion automatica de URL, y has de controlar tu el formato