Foros del Web » Programando para Internet » PHP »

combox dependientes con Xajax

Estas en el tema de combox dependientes con Xajax en el foro de PHP en Foros del Web. por favor ayudenme alguien que se pa de Xajax por favor tengo este codigo para poder tener un combox dependiente de Ciudad -> Comuna -> ...
  #1 (permalink)  
Antiguo 15/05/2012, 15:15
Avatar de a_gomez  
Fecha de Ingreso: marzo-2012
Ubicación: /var/www/
Mensajes: 48
Antigüedad: 12 años, 8 meses
Puntos: 2
Pregunta combox dependientes con Xajax

por favor ayudenme alguien que se pa de Xajax por favor

tengo este codigo para poder tener un combox dependiente de
Ciudad -> Comuna -> Barrio

me carga el primer combo pero a la hora de pasar a la funcion busca_comuna no me carga nada

gracias por todos sus aportes ....


Código PHP:
Ver original
  1. <?php
  2.  
  3. require_once("conexion.php");//incluimos los archivos de conexion
  4. @require_once("xajax/xajax_core/xajax.inc.php");
  5. $xajax = new xajax();
  6. $xajax->configure('javascript URI','xajax');
  7. ////Definimos las opciones por fecto. éstas pueden tomarse de $_POST, $_GET, $_SESSION, base de datos o lo que se requiera
  8. $ciudad_sel='';
  9. $comuna_sel='';
  10. $barrio_sel='';
  11.  
  12.  
  13. function busca_comuna($ciudad,$sel=''){//definimos la funcion que dado un ciudad busca los municipios
  14.    
  15.    $comuna=mysql_query("select distinct comuna from barrios where ciudad='$ciudad'");//buscamos las comunas de la ciudad indicada
  16.    $js="
  17.   var sel=document.getElementById('comuna');//tomamos el select
  18.   sel.length=1;//En caso de tener opciones lo 'vaciamos', dejando solo la primera ";
  19.    $x=1;
  20.    while($m=mysql_fetch_assoc($comuna)){
  21.        $js.="
  22.       sel.length++;//agregamos una nueva opcion
  23.       sel.options[$x].value='$m[comuna]';//Indicamos el valor puede ser diferente al texto
  24.       sel.options[$x].text='$m[comuna]';";
  25.        if($m['comuna']==$sel)//si el municipio es la opcion por defecto
  26.            $js.="sel.options[$x].selected=true;";//indicamos que quede seleccionado
  27.        $x++;
  28.    }
  29.    mysql_free_result($comuna);
  30.    mysql_close();
  31.    $respuesta= new xajaxResponse();//creamos una respuesta tipo xajax
  32.    $respuesta->script($js);//asignamos el script js a la respuesta
  33.    return $respuesta; //respondemos el resultado
  34. }
  35. function busca_barrio($ciudad,$comuna,$sel=''){//definimos la funcion que dado un ciudad y municipio busca las colonias
  36.    
  37.    $barrio=mysql_query("select distinct barrio from barrios where ciudad='$ciudad' and comuna='$comuna'");//ahora buscamos las colonias del ciudad y municipio
  38.    $js="
  39.   var sel=document.getElementById('barrio');//tomamos el select
  40.   sel.length=1;//En caso de tener opciones lo 'vaciamos', dejando solo la primera ";
  41.    $x=1;
  42.    while($c=mysql_fetch_assoc($barrio)){
  43.        $js.="
  44.       sel.length++;//agregamos una nueva opcion
  45.       sel.options[$x].value='$c[barrio]';
  46.       sel.options[$x].text='$c[barrio]';";
  47.        if($c['barrio']==$sel)//si la colonia es la opcion por defecto
  48.            $js.="sel.options[$x].selected=true;";//indicamos que quede seleccionada
  49.        $x++;
  50.    }
  51.    mysql_free_result($barrio);
  52.    mysql_close();
  53.    $respuesta= new xajaxResponse();//creamos una respuesta tipo xajax
  54.    $respuesta->script($js);//asignamos el script js a la respuesta
  55.    return $respuesta; //respondemos el resultado
  56. }
  57.  
  58. $xajax->registerFunction("busca_comuna");//registramos nuestras funciones php para que se puedan llamar via ajax
  59. $xajax->registerFunction("busca_barrio");
  60. $xajax->processRequest();//Indicamos a xajax que procese las respuestas.
  61. ?>
  62. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/2000/REC-xhtml1-20000126/DTD/xhtml1-transitional.dtd">
  63. <html>
  64. <head>
  65.    <?php $xajax->printJavascript();?>
  66.  </head>
  67.  <body>
  68. <select name="ciudad" id="ciudad" onchange="xajax_busca_comuna(this.value,'<?php echo $comuna_sel?>');"><!-- Al cambiar, llamara la funcion que buscara los municipios del ciudad selecionado, pasando ademas el municipio por defecto si lo hubiera-->
  69.    <option value="">----- SELECCIONE LA CIUDAD -----</option>
  70.    <?php
  71.        
  72.        $ciudad=mysql_query("select distinct ciudad from barrios order by ciudad");//distinct para obtener los ciudades sin repetirse
  73.        while($p=mysql_fetch_assoc($ciudad)){
  74.            echo "<option value=\"$p[ciudad]\" ";
  75.            if($p['ciudad']==$ciudad_sel)//$ciudad_sel seria la opción por defecto, puede ser obtenida por post, sesion, bd etc.
  76.                echo 'selected';
  77.            echo ">$p[ciudad]</option>";
  78.        }
  79.        mysql_free_result($ciudad);
  80.        mysql_close();
  81.    ?>
  82.   </select>
  83.  
  84.   <select name="comuna" id="comuna" onchange="xajax_busca_barrio(document.getElementById('ciudad').value,this.value,'<?php echo $barrio_sel?>');"><!-- Ahora pasamos dos parametros, el ciudad y la colonia seleccionada-->
  85.        <option value="">-- SELECCIONE LA COMUNA ----</option>
  86.   </select>
  87.  
  88.   <select name="barrio" id="barrio">
  89.        <option value="">----- SELECCIONE EL BARRIO -----</option>
  90.   </select>
  91.    
  92.  </body>
  93. </html>
  #2 (permalink)  
Antiguo 15/05/2012, 16:09
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 16 años, 6 meses
Puntos: 528
Respuesta: combox dependientes con Xajax

Utiliza firefox e instala el addon firebug, éste te mostrará qué te devuelve la llamada xajax, ya sea un error o valores vacíos.

Etiquetas: ajax, combox, dependientes, myslq, select
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 08:12.