Foros del Web » Programando para Internet » Javascript » Frameworks JS »

Pasando parametros con AJAX

Estas en el tema de Pasando parametros con AJAX en el foro de Frameworks JS en Foros del Web. Hola a todos y gracias por vuestra ayuda de antemano, El problema esque tengo un formulario donde hay tres select; pais, region, ciudad. Cuando seleciono ...
  #1 (permalink)  
Antiguo 26/10/2007, 09:43
 
Fecha de Ingreso: marzo-2007
Mensajes: 31
Antigüedad: 17 años, 9 meses
Puntos: 0
Pasando parametros con AJAX

Hola a todos y gracias por vuestra ayuda de antemano,

El problema esque tengo un formulario donde hay tres select; pais, region, ciudad.
Cuando seleciono pais obtengo region y cuando obtengo region puedo acceder a selecionar ciudad.

El problema me surge cuando intento enviar todos los parametros a otro pagina la cual se encarga de hacer una busqueda segun los parametros introducidos anteriormente.

El formulario unicamente me envia los valores del pais pero no de la region ni de la ciudad.

Alguna idea por favor;

Saludos,

Juan
  #2 (permalink)  
Antiguo 26/10/2007, 10:36
Avatar de Shiryu_Libra
Colaborador
 
Fecha de Ingreso: febrero-2007
Ubicación: Cantando "Screenager" en "Kirafa Kaput"
Mensajes: 3.614
Antigüedad: 17 años, 9 meses
Puntos: 88
Re: Pasando parametros con AJAX

la busqueda de los tres campos tambien la realizas con el mismo metodo, o tienes uno por separado???

puedes poner tu codigo de envio, y el codigo del formulario???
__________________
"Eres parte del problema, parte de la solucion o parte del paisaje"
Un Saludo desde Desierto de Altar, Sonora, MX.
Shiryu_libra
  #3 (permalink)  
Antiguo 26/10/2007, 11:32
 
Fecha de Ingreso: marzo-2007
Mensajes: 31
Antigüedad: 17 años, 9 meses
Puntos: 0
Re: Pasando parametros con AJAX

Ok, te paso todo el codigo:

Este seria el principal donde se llama por primera vez al AJAX

Código:
<form action=results.php method=get>
<tr>
<td align="left" style="padding-left:10px" width="20%">Select Country:</td>
<td align="left" style="padding-left:10px">
<div id="demo">	
	<div id="demoIzq">
		<? 
			$consulta=mysql_query("SELECT con_id, name FROM geo_countries ORDER BY name");
			echo "<select name='countries' id='countries' onChange='cargaContenido(this.id)'>";
			echo "<option value='0'>Select One</option>";
			while($registro=mysql_fetch_row($consulta))
			{
				echo "<option value='".$registro[0]."'>".$registro[1]."</option>";
			}
			echo "</select>"; 
		?>
	</div>
<tr>
<td align="left" style="padding-left:10px">Select State:</td>
<td align="left" style="padding-left:10px">	
	<div id="demoMed">
		<select disabled="disabled" name="states" id="states">
			<option value="0">Select One...</option>
		</select>
	</div>
</td>
</tr>
<tr>
<td align="left" style="padding-left:10px">Select Location:</td>
<td align="left" style="padding-left:10px">	
	<div id="demoDer">
		<select disabled="disabled" name="cities" id="cities">
			<option value="0">Select One...</option>
		</select>
	</div>
</td>
</tr>
(**El problema es cuando me envia a la pagina results.php solo me pasa el valor de country**)

Este es el archivo AJAX
Código:
function nuevoAjax()
{ 
	/* Crea el objeto AJAX. Esta funcion es generica para cualquier utilidad de este tipo, por
	lo que se puede copiar tal como esta aqui */
	var xmlhttp=false;
	try
	{
		// Creacion del objeto AJAX para navegadores no IE
		xmlhttp=new ActiveXObject("Msxml2.XMLHTTP");
	}
	catch(e)
	{
		try
		{
			// Creacion del objet AJAX para IE
			xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
		}
		catch(E)
		{
			if (!xmlhttp && typeof XMLHttpRequest!='undefined') xmlhttp=new XMLHttpRequest();
		}
	}
	return xmlhttp; 
}

// Declaro los selects que componen el documento HTML. Su atributo ID debe figurar aqui.
var listadoSelects=new Array();
listadoSelects[0]="countries";
listadoSelects[1]="states";
listadoSelects[2]="cities";

function buscarEnArray(array, dato)
{
	// Retorna el indice de la posicion donde se encuentra el elemento en el array o null si no se encuentra
	var x=0;
	while(array[x])
	{
		if(array[x]==dato) return x;
		x++;
	}
	return null;
}

function cargaContenido(idSelectOrigen)
{
	// Obtengo la posicion que ocupa el select que debe ser cargado en el array declarado mas arriba
	var posicionSelectDestino=buscarEnArray(listadoSelects, idSelectOrigen)+1;
	// Obtengo el select que el usuario modifico
	var selectOrigen=document.getElementById(idSelectOrigen);
	// Obtengo la opcion que el usuario selecciono
	var opcionSeleccionada=selectOrigen.options[selectOrigen.selectedIndex].value;
	// Si el usuario eligio la opcion "Elige", no voy al servidor y pongo los selects siguientes en estado "Selecciona opcion..."
	if(opcionSeleccionada==0)
	{
		var x=posicionSelectDestino, selectActual=null;
		// Busco todos los selects siguientes al que inicio el evento onChange y les cambio el estado y deshabilito
		while(listadoSelects[x])
		{
			selectActual=document.getElementById(listadoSelects[x]);
			selectActual.length=0;
			
			var nuevaOpcion=document.createElement("option"); nuevaOpcion.value=0; nuevaOpcion.innerHTML="Select One...";
			selectActual.appendChild(nuevaOpcion);	selectActual.disabled=true;
			x++;
		}
	}
	// Compruebo que el select modificado no sea el ultimo de la cadena
	else if(idSelectOrigen!=listadoSelects[listadoSelects.length-1])
	{
		// Obtengo el elemento del select que debo cargar
		var idSelectDestino=listadoSelects[posicionSelectDestino];
		var selectDestino=document.getElementById(idSelectDestino);
		// Creo el nuevo objeto AJAX y envio al servidor el ID del select a cargar y la opcion seleccionada del select origen
		var ajax=nuevoAjax();
		ajax.open("GET", "lang/english/select_dependientes_proceso.php?select="+idSelectDestino+"&opcion="+opcionSeleccionada, true);
		ajax.onreadystatechange=function() 
		{ 
			if (ajax.readyState==1)
			{
				// Mientras carga elimino la opcion "Select One..." y pongo una que dice "Loading..."
				selectDestino.length=0;
				var nuevaOpcion=document.createElement("option"); nuevaOpcion.value=0; nuevaOpcion.innerHTML="Loading...";
				selectDestino.appendChild(nuevaOpcion); selectDestino.disabled=true;	
			}
			if (ajax.readyState==4)
			{
				selectDestino.parentNode.innerHTML=ajax.responseText;
			} 
		}
		ajax.send(null);
	}
}
//-->
Y por ultimo el archivo PHP que recoge los datos del AJAX a traves del GET y los muestra.

Código:
<?php
// Array que vincula los IDs de los selects declarados en el HTML con el nombre de la tabla donde se encuentra su contenido
$listadoSelects=array(
"countries"=>"geo_countries",
"states"=>"geo_states",
"cities"=>"geo_cities"
);

function validaSelect($selectDestino)
{
	// Se valida que el select enviado via GET exista
	global $listadoSelects;
	if(isset($listadoSelects[$selectDestino])) return true;
	else return false;
}


function validaOpcion($opcionSeleccionada)
{
	// Se valida que la opcion seleccionada por el usuario en el select tenga un valor numerico
	if(is_numeric($opcionSeleccionada)) return true;
	else return false;
}

$selectDestino=$_GET["select"];
$opcionSeleccionada=$_GET["opcion"];

if(validaSelect($selectDestino) && validaOpcion($opcionSeleccionada) && ($listadoSelects[$selectDestino]=="geo_states"))
{
	$tabla=$listadoSelects[$selectDestino];
	$connection = mysql_connect("localhost", "joblite", "hubble") or die (mysql_error());
	$db = mysql_select_db("joblite", $connection) or die (mysql_error());
	$consulta=mysql_query("SELECT sta_id, name FROM $tabla WHERE con_id='$opcionSeleccionada' ORDER BY name") or die(mysql_error());
	
	// Comienzo a imprimir el select
	echo "<select name='$selectDestino' id='$selectDestino' onChange='cargaContenido(this.id)'>";
	echo "<option value='0'>Select One....</option>";
	while($registro=mysql_fetch_row($consulta))
	{
		// Convierto los caracteres conflictivos a sus entidades HTML correspondientes para su correcta visualizacion
		$registro[1]=htmlentities($registro[1]);
		// Imprimo las opciones del select
		echo "<option value='".$registro[0]."'>".$registro[1]."</option>";
	}			
	echo "</select>";
}
else{
	$tabla=$listadoSelects[$selectDestino];
	$connection = mysql_connect("localhost", "joblite", "hubble") or die (mysql_error());
	$db = mysql_select_db("joblite", $connection) or die (mysql_error());
	$consulta=mysql_query("SELECT cty_id, name FROM $tabla WHERE sta_id='$opcionSeleccionada' ORDER BY name") or die(mysql_error());
	
	// Comienzo a imprimir el select
	echo "<select name='$selectDestino' id='$selectDestino'>";
	echo "<option value='0'>Select One....</option>";
	while($registro=mysql_fetch_row($consulta))
	{
		// Convierto los caracteres conflictivos a sus entidades HTML correspondientes para su correcta visualizacion
		$registro[1]=htmlentities($registro[1]);
		// Imprimo las opciones del select
		echo "<option value='".$registro[0]."'>".$registro[1]."</option>";
	}			
	echo "</select>";
}

?>

Muchisimas gracias por cualquier ayuda porque me estoy ya volviendo loko
  #4 (permalink)  
Antiguo 27/10/2007, 04:47
 
Fecha de Ingreso: marzo-2007
Mensajes: 31
Antigüedad: 17 años, 9 meses
Puntos: 0
Re: Pasando parametros con AJAX

La pagina donde pueden ver todo visualizado es : http://www.sports-city.org/jobs/

Si seleccionan un pais una region y una ciudad cuando le den a buscar veran que solo se pasa el identificador del pais.

Muchas gracias por cualquier ayuda y un saludo
  #5 (permalink)  
Antiguo 29/10/2007, 03:21
 
Fecha de Ingreso: marzo-2007
Mensajes: 31
Antigüedad: 17 años, 9 meses
Puntos: 0
Re: Pasando parametros con AJAX

De verdad que nadie sabria una respuesta o esque lo que quiero simplemente no se puede hacer?????

Si hay algun otro metodo que alguien supiera para hacer este form estaria muy agradecido.

Saludos a todos y tener buen dia.
  #6 (permalink)  
Antiguo 29/10/2007, 04:13
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años, 8 meses
Puntos: 1284
Re: Pasando parametros con AJAX

Hola:

Acabo de mirarlo en explorer 7 y pasan todos los parámetros, aunque ya que usas el método GET, porqué no te fijas si los resultados de tu consulta ajax son los adecuados. En mi experiencia con ajax (bastante poca) chequeo los resultados de esa manera, y aunque sea más trabajoso, me gusta más las respuestas XML, creo que son más fáciles de controlar.

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #7 (permalink)  
Antiguo 29/10/2007, 06:24
 
Fecha de Ingreso: marzo-2007
Mensajes: 31
Antigüedad: 17 años, 9 meses
Puntos: 0
Re: Pasando parametros con AJAX

Lo primero muxas gacias por la respuesta. Tienes toda la razon. Por extraño que parezca no trabaja en Firefox pero si en Exporer. Bueno esto me hace pensar mas en el problema de la llamada al browser.

Muchas gracias de nuevo caricatos y a tener un buen dia :)
  #8 (permalink)  
Antiguo 29/10/2007, 09:03
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años, 8 meses
Puntos: 1284
Re: Pasando parametros con AJAX

Hola:

Una de las virtudes de forefox es su consola de errores o consola javascript... espero que sepas usarla (menú herramientas, creo)... ajax es una tecnología bastante nueva, y todavía no está estandarizada, así que es normal que algunas rutinas respondan de distinta forma según el navegador... mantennos informados.

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:47.