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

Ayuda urgente con ajax por favor

Estas en el tema de Ayuda urgente con ajax por favor en el foro de Frameworks JS en Foros del Web. Hola, estoy usando un codigo de [URL="http://www.formatoweb.com.ar/ajax/select_dependientes.php"]http://www.formatoweb.com.ar/ajax/select_dependientes.php[/URL] para hacer selects dependientes de 2 niveles, me ha funcionado bien con dos selects, ahora intento hacer que ...
  #1 (permalink)  
Antiguo 23/12/2010, 10:17
 
Fecha de Ingreso: febrero-2008
Mensajes: 13
Antigüedad: 16 años, 2 meses
Puntos: 0
Exclamación Ayuda urgente con ajax por favor

Hola, estoy usando un codigo de [URL="http://www.formatoweb.com.ar/ajax/select_dependientes.php"]http://www.formatoweb.com.ar/ajax/select_dependientes.php[/URL] para hacer selects dependientes de 2 niveles, me ha funcionado bien con dos selects, ahora intento hacer que al seleccionar una opcion del primer select se actualicen las opciones de 2 selects simultaneamente, lo k intente hacer es duplicar la funcion que hace la actualizacion en el evento onChange del primer select y llamar a ambas aasi onChange="cargaContenido(this.id);cargaContenido2( this.id)" al interior de la segunda funcion cambie el nombre de la funcion nuevoAjax por neoAjax para evitar cualquier colision, no he logrado hacer k esto funcione y me da el siguiente error "selectDestino.parentNode is null or not an object" sospecho que el problema puede estar aqui:
if (ajax.readyState==4)
{
selectDestino.parentNode.innerHTML=ajax.responseTe xt;
}
que es una linea que es identica en ambas funciones, si llamo solo a una funcion (ya sea la primera o la segunda) el combobox correspondiente funciona de maravilla pero si trato que funcionen ambos a la vez me da siempre ese mismo error, esto es algo que no comprendo porque soy novato en ajax ojala un experto pueda ayudarme DE VERDAD ME URGE COMO NO TIENEN IDEA, aqui dejo mi messenger [email protected](si es necesario agregenme)si alguien tiene una idea de k estoy haciendo mal, muchas gracias

aqui dejo los codigos originales, para tener una mejor idea:

select_dependientes.php
Cita:
<?php
$con_string_quickmenu="host=localhost port=5432 dbname=allion user=postgres password=postgres";//string de conexion
if($conexion_quickmenu = pg_connect($con_string_quickmenu)){//si se puede abrir la conexion a BD
//echo ("conexion establecida con BD<br>");
}else{//si no se puede abrir la conexion
echo("no se puede conectar a la BD<br>");
}//fin del if-else conexion
$consulta=pg_query("SELECT id_operadora, nombre_operadora FROM operadora");
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html lang="es">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>comboboxes dependientes ajax</title>
<style>

#demoDer{
position:relative;
left:150px;
top:-20px;
}
</style>
<script type="text/javascript">
function newAjax()
{
/* 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]="operadora_select";
listadoSelects[1]="tipoGrafica";

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(idSelectOrige n);
// 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(listadoSelect s[x]);
selectActual.length=0;

var nuevaOpcion=document.createElement("option"); nuevaOpcion.value=0; nuevaOpcion.innerHTML="Seleccionar";
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(idSelectDest ino);
// Creo el nuevo objeto AJAX y envio al servidor el ID del select a cargar y la opcion seleccionada del select origen
var ajax=newAjax();
ajax.open("GET", "select_dependientes_proceso.php?select="+idSelect Destino+"&opcion="+opcionSeleccionada, true);
// ajax.open("GET", "select_dependientes_proceso2.php?select="+idSelec tDestino+"&opcion="+opcionSeleccionada, true);
ajax.onreadystatechange=function()
{
if (ajax.readyState==1)
{
// Mientras carga elimino la opcion "Selecciona Opcion..." y pongo una que dice "Cargando..."
selectDestino.length=0;
var nuevaOpcion=document.createElement("option"); nuevaOpcion.value=0; nuevaOpcion.innerHTML="Cargando...";
selectDestino.appendChild(nuevaOpcion); selectDestino.disabled=true;
}
if (ajax.readyState==4)
{
selectDestino.parentNode.innerHTML=ajax.responseTe xt;
}
}
ajax.send(null);
}
}
</script>
</head>
<body>
<div id="demo" style="width:600px;">
<div id="demoIzq">
<select name='operadora_select' id='operadora_select' onChange='cargaContenido(this.id)'>
<?php
//echo "<option value='0'>Elegir operadora</option>";
while($result_operadoras=pg_fetch_row($consulta))
{
echo "<option value='".$result_operadoras[0]."'>".$result_operadoras[1]."</option>";
}
?>
</select>
</div>
<div id="demoDer">
<select disabled="disabled" name="tipoGrafica" id="tipoGrafica">
<option value="1">barras 2D</option>
</select>
</div>
</div>
</body>
</html>

select_dependientes_proceso.php
Cita:
<?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(
"operadora_select"=>"operadora",
"tipoGrafica"=>"tipoGrafica"
);

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))
{
$tabla=$listadoSelects[$selectDestino];

$con_string_quickmenu="host=localhost port=5432 dbname=allion user=postgres password=postgres";//string de conexion
if($conexion_quickmenu = pg_connect($con_string_quickmenu)){//si se puede abrir la conexion a BD
//echo ("conexion establecida con BD<br>");
}else{//si no se puede abrir la conexion
echo("no se puede conectar a la BD<br>");
}//fin del if-else conexion

if($opcionSeleccionada!=5){//si la opcion seleccionada no es 'todos'
$consulta=pg_query("select id_tipo_grafica,nombre_tipo_grafica from tipo_grafica order by id_tipo_grafica") or die("error query tipo grafica");
}elseif($opcionSeleccionada==5){
$consulta=pg_query("select id_tipo_grafica,nombre_tipo_grafica from tipo_grafica where visibilidad=1 order by id_tipo_grafica") or die("error query tipo grafica");
}

// Comienzo a imprimir el select
echo "<select name='tipoGrafica' id='tipoGrafica' onChange='cargaContenido(this.id)'>";
// echo "<option value='0'>Elegir Grafica</option>";
while($registro=pg_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>";
//echo $opcionSeleccionada;
}
?>

Última edición por carloshhp; 23/12/2010 a las 10:23 Razón: ajax selects dependientes combobox
  #2 (permalink)  
Antiguo 25/12/2010, 23:23
 
Fecha de Ingreso: febrero-2008
Mensajes: 13
Antigüedad: 16 años, 2 meses
Puntos: 0
Respuesta: Ayuda urgente con ajax por favor

Despues de investigar y leer sobre DOM encontre la solucion la poseto por si a alguien le fuera util:
Cita:
<?php
$con_string_quickmenu="host=localhost port=5432 dbname=allion user=postgres password=postgres";//string de conexion
if($conexion_quickmenu = pg_connect($con_string_quickmenu)){//si se puede abrir la conexion a BD
echo ("conexion establecida con BD<br>");
}else{//si no se puede abrir la conexion
echo("no se puede conectar a la BD<br>");
}//fin del if-else conexion
$consulta=pg_query("SELECT id_1, nombre FROM elemento1");
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>AJAX, Ejemplos: Combos (select) dependientes, codigo fuente - ejemplo</title>
<script type="text/javascript">
function nuevoAjax(){
var xmlhttp=false;
try{
xmlhttp=new ActiveXObject("Msxml2.XMLHTTP");
}
catch(e){
try{
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}catch(E){
if (!xmlhttp && typeof XMLHttpRequest!='undefined') xmlhttp=new XMLHttpRequest();
}
}
return xmlhttp;
}//fin de funcion generica de ajax

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

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;
}//fin buscarEnArray

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;
var posicionSelectDestino=1;
// Obtengo el select que el usuario modifico
var selectOrigen=document.getElementById(idSelectOrige n);
// 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(listadoSelect s[x]);//hace select actual igual al select destino
selectActual.length=0;//hace el select actual de longitud cero
var nuevaOpcion=document.createElement("option");//crea una nueva opcion
nuevaOpcion.value=0; //pone cero en el value de la nueva opcion
nuevaOpcion.innerHTML="Selecciona Opci&oacute;n...";//pone el texto a la nuev opcion
selectActual.appendChild(nuevaOpcion);
selectActual.disabled=true;
x++;
}// fin while listadoSelects
}else if(idSelectOrigen!=listadoSelects[1]){//Compruebo que el select modificado no sea el ultimo de la cadena
// Obtengo el elemento del select que debo cargar
var idSelectDestino=listadoSelects[posicionSelectDestino];
var selectDestino=document.getElementById('estados');
// var selectDestino2=document.getElementById('select2');
// 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", "select_dependientes_proceso.php?select="+idSelect Destino+"&opcion="+opcionSeleccionada, true);
ajax.onreadystatechange=function(){
if (ajax.readyState==1){// Mientras carga elimino la opcion "Selecciona Opcion..." y pongo una que dice "Cargando..."
selectDestino.length=0;
var nuevaOpcion=document.createElement("option");
nuevaOpcion.value=0;
nuevaOpcion.innerHTML="Cargando...";
selectDestino.appendChild(nuevaOpcion);
selectDestino.disabled=true;
}//fin ajax.readyState==1
if (ajax.readyState==4){
// alert(selectDestino.parentNode.innerHTML);
// alert(selectDestino2.parentNode.innerHTML);
selectDestino.parentNode.innerHTML=ajax.responseTe xt;
}//ajax.readyState==4
}//ajax on ready state
ajax.send(null);
//--------------------------------------------------
var selectDestino2=document.getElementById('select2');
var idSelectDestino2='select2';
// Creo el nuevo objeto AJAX y envio al servidor el ID del select a cargar y la opcion seleccionada del select origen
var ajaxx=nuevoAjax();
ajaxx.open("GET", "select_dependientes_proceso2.php?select="+idSelec tDestino2+"&opcion="+opcionSeleccionada, true);
ajaxx.onreadystatechange=function(){
if (ajaxx.readyState==1){// Mientras carga elimino la opcion "Selecciona Opcion..." y pongo una que dice "Cargando..."
selectDestino2.length=0;
var nuevaOpcion=document.createElement("option");
nuevaOpcion.value=0;
nuevaOpcion.innerHTML="Cargando...";
selectDestino2.appendChild(nuevaOpcion);
selectDestino2.disabled=true;
}//fin ajax.readyState==1
if (ajaxx.readyState==4){
// alert(selectDestino.parentNode.innerHTML);
//alert(selectDestino2.parentNode.innerHTML);
selectDestino2.parentNode.innerHTML=ajaxx.response Text;
}//ajax.readyState==4
}//ajax on ready state
ajaxx.send(null);
//-----------------------------------------------------
}// else if
}//carga contenido
</script>
</head>
<body>
<div id="demo" style="width:600px;">
<div id="demoIzq">
<select name='paises' id='paises' onChange='cargaContenido(this.id)'>
<?php
//echo "<option value='0'>Elige</option>";
while($registro=pg_fetch_row($consulta))
{
echo "<option value='".$registro[0]."'>".$registro[1]."</option>";
}
?>
</select>
</div>
<div id="demoDer">
<select disabled="disabled" name="estados" id="estados">
<option value="0">Selecciona opci&oacute;n...</option>
</select>
</div>
<div id="demoMed">
<select disabled="disabled" name="select2" id="select2">
<option value="0">Selecciona opci&oacute;n...</option>
</select>
</div>
</div>
</body>
</html>

Etiquetas: ajax, favor
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 16:00.