Yii Framework Forum: Insertar variable javascript en CHtml::ajax - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Insertar variable javascript en CHtml::ajax Rate Topic: -----

#1 User is offline   IRCSASW 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 65
  • Joined: 01-September 11
  • Location:Cancún, México.

Posted 23 February 2012 - 07:50 PM

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.
Arturo Ramos
www.ircsasoftware.com.mx
Cancún, México
0

#2 User is offline   JPatagonico 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 55
  • Joined: 12-March 11
  • Location:Argentina

Posted 25 February 2012 - 10:52 PM

Hola!
Lo pudiste solucionar?
0

#3 User is offline   shaolin 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 114
  • Joined: 29-January 11
  • Location:Zacatecas, México

Posted 27 February 2012 - 06:55 PM

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.
0

#4 User is offline   IRCSASW 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 65
  • Joined: 01-September 11
  • Location:Cancún, México.

Posted 27 February 2012 - 08:15 PM

View PostJPatagonico, on 25 February 2012 - 10:52 PM, said:

Hola!
Lo pudiste solucionar?



No, aun no... ::)
Arturo Ramos
www.ircsasoftware.com.mx
Cancún, México
0

#5 User is offline   IRCSASW 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 65
  • Joined: 01-September 11
  • Location:Cancún, México.

Posted 27 February 2012 - 08:27 PM

View Postshaolin, on 27 February 2012 - 06:55 PM, said:

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 ...


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.
Arturo Ramos
www.ircsasoftware.com.mx
Cancún, México
0

#6 User is offline   JPatagonico 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 55
  • Joined: 12-March 11
  • Location:Argentina

Posted 29 February 2012 - 08:53 PM

No sé si sirve para este caso, pero mira: http://www.yiiframew...jaxsubmitbutton

Saludos!
0

#7 User is offline   Jack Fiallos 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 256
  • Joined: 15-October 09
  • Location:Mexico

Posted 04 March 2012 - 09:33 PM

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 :)
       '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
Celestic Dev Team
Yii Open Source Project Manager
1

#8 User is offline   m3mm0 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 7
  • Joined: 21-February 13

Posted 12 March 2013 - 10:46 AM

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...
0

#9 User is offline   Miguel Garcia 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 28
  • Joined: 06-November 12

Posted 12 March 2013 - 01:23 PM

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
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users