AJAX - combos relacionados

   
Vista:

combos relacionados

Publicado por francisharo (4 intervenciones) el 10/09/2008 00:20:01
Que tal chicos, tengo un problema y el tema es que soy nuevo con ajax, tengo dos combos relacionados, el primero es cargado desde la DB, postgres y del resultado de esta se carga el segundo combo. el codigo es el siguiente si alguien puede decirme cual es el error, por que no lo encuentro. Saludos.
<?php
include ("conectar.php");
$query = "SELECT * FROM pedido";
$result = pg_query($query);
echo"<select name='Actividades' onchange='javascript:cargarCombo('segundo.php', 'Actividades', 'Div_Subactividades')' id='Actividades'>";
// echo "<select name='paises' id='paises' onChange='cargaContenido(this.id)'>";
echo "<option value='0'>Elige</option>";
while ($registro = pg_fetch_row($result))
{
$ID=$registro[4];
echo "<option value='".$registro[4]."'>".$registro[1]."</option>";
}
echo "</select>";

?>
<p>
<div id="Div_Subactividades">
<label for="SubActividad">SubActividad:</label>
<select name="SubActividades" id="SubActividades" class="select">
</select>
</div>
</p>

<script type="text/javascript">
var peticion = false;
var testPasado = false;
try {
peticion = new XMLHttpRequest();
} catch (trymicrosoft) {
try {
peticion = new ActiveXObject("Msxml2.XMLHTTP");
} catch (othermicrosoft) {
try {
peticion = new ActiveXObject("Microsoft.XMLHTTP");
} catch (failed) {
peticion = false;
}
}
}
if (!peticion)
alert("ERROR AL INICIALIZAR!");

function cargarCombo (url, comboAnterior, element_id) {
//Obtenemos el contenido del div
//donde se cargaran los resultados
var element = document.getElementById(element_id);
//Obtenemos el valor seleccionado del combo anterior
var valordepende = document.getElementById(comboAnterior)
var x = valordepende.value
//construimos la url definitiva
//pasando como parametro el valor seleccionado
var fragment_url = url+'?Id='+x;
// element.innerHTML = '<img src="Imagenes/loading.gif" />';
//abrimos la url
peticion.open("GET", fragment_url);
peticion.onreadystatechange = function() {
if (peticion.readyState == 4) {
//escribimos la respuesta
element.innerHTML = peticion.responseText;
}
}
peticion.send(null);
}
</script>

Este es el archivo que carga el segundo combo, llamado "segundo.php"

<?php
$IdActividad = $_REQUEST['Id'];
include ("conectar.php");
$query = "SELECT * FROM deatalle_pedido WHERE IdActividad=$IdActividad";
$result = pg_query($query);
echo "<select name='SubActividades' id='SubActividades' class='select'>";
echo "<option value='0'>Elige</option>";
while ($registro = pg_fetch_row($result))
{
$ID=$registro[4];
echo "<option value='".$registro[4]."'>".$registro[1]."</option>";
echo htmlentities($registro[4]);
}
echo "</select>";

?>
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:combos relacionados

Publicado por gabriel bandala (15 intervenciones) el 12/09/2008 16:48:38
Hay un par de articulos completos con el codigo para que lo puedas bajar y probar respecto a lo que preguntas.

Para llenar el combo dinámicamente con una rutina y hacer este dependiendo de otro, para el caso son visibles pero no habilitados, de la misma forma puedes hacerlos no visibles, y como mandar los parametros para las consultas.

Este es un avance:

function FillParameters()
{
//Esta funcion solo regresa los valores de ciertas variables procesadas en el server
var X=null;
var Variable1="Esta es la variable1";
var Variable2="Esta es la variable2";
var Variable3="Esta es la variable3";
var Variable4="Esta es la variable4";
if(X && X.readyState!=0) { X.abort(); }//Aborta el objeto si es que ya esta inicializado
X=createXMLHTTP();
d = document.getElementById("disp");
eval(d).innerText = "Cargando datos....";
if(X!=null)
{
X.open("GET","db.aspx?Variable1="+Variable1+"&Variable2="+Variable2+"&Variable3="
+Variable3+"&Variable4="+Variable4,false);
X.onreadystatechange=function()
{ if(X.readyState==4&&X.responseText)
{ eval(d).innerHTML = X.responseText;}};
}
X.send(null);
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:combos relacionados

Publicado por weirdmix (45 intervenciones) el 12/09/2008 20:21:56
dos cosas:
en primer lugar deberias hacer una funcion aparte para manejar la respuesta del objeto ajax. ademas te falta checar si el status del objeto ajax es igual a 200, si no es q hubo algun error.
en segundo lugar, para q necesitas contruir todo el SELECT ?? es mas facil y rapido que regreses una cadena separada por un caracter especial, digamos el pipe (|) y luego con javascript descompongas la cadena y cada elemento seria un elemento del select, no necesitas pintarlo nuevamente ya q con javascript puedes quitar los elementos existentes y añadirles nuevos...

mandame un mail si quieres una explicacion mas amplia o si todavia tienes dudas.

por cierto, tu codigo no parece tener errores a primera vista mas q el chequeo del status del ajax (q tambien deberias crear una funcion para tener la posibilidad de tener varios ajax al mismo tiempo).

saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar