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

Primeros pasos con Xajax, no hago funcionar una lista dependiente

Estas en el tema de Primeros pasos con Xajax, no hago funcionar una lista dependiente en el foro de Frameworks JS en Foros del Web. Buenas, como ya indica el título, estoy viendo esto de Ajax. Mediante esta web me tope con una librería PHP llamada Xajax, para utilizar esta ...
  #1 (permalink)  
Antiguo 17/05/2011, 08:01
 
Fecha de Ingreso: agosto-2010
Mensajes: 100
Antigüedad: 10 años, 1 mes
Puntos: 2
Primeros pasos con Xajax, no hago funcionar una lista dependiente

Buenas, como ya indica el título, estoy viendo esto de Ajax. Mediante esta web me tope con una librería PHP llamada Xajax, para utilizar esta técnica (Ajax).
Encontré un tutorial que hablaba de una lista de Provincias y otra de Localidades de esas provincias.
En base a ese tuto, quise hacer algo parecido, pero con una lista de Marcas de autos y otra con los respectivos modelos. En base a información que tengo en un bd.
Por empezar el codigo php es el siguiente:

form_generate.php
Código PHP:
require ('includes/php/xajax/xajax.inc.php');

//instanciamos el objeto de la clase xajax
$xajax = new xajax(); 
$xajax->setCharEncoding('ISO-8859-1');
$xajax->decodeUTF8InputOn();

$xajax->printJavascript('includes/php/xajax/');

function 
selectMarcas(){
    
$query "SELECT m.idMarca, m.Marca FROM Marcas m";
    
$res mysql_query($query) or die(mysql_error());
    while (
$row mysql_fetch_array($res)){
            
$idMarca $row[0];
            
$nomMarca $row[1]; 
            echo 
"<option value=$idMarca>".$nomMarca."</option>";
    }
}

function 
selectMod($id){
    
$respuesta = new xajaxResponse('ISO-8859-1');
    
$query "SELECT m.Modelo FROM Modelos m WHERE m.idMarca = $id";
    
$res mysql_query($query) or die(mysql_error());
    while (
$row mysql_fetch_array($res)){
            
$select .= "<option>".$row[0]."</option>";
    }
    
$respuesta->addAssign("mod","innerHTML",$select);
    return 
$respuesta;
}
$xajax->registerFunction("selectMod");
$xajax->processRequests();

?> 
El HTML esta así:

busc_form.php
Código HTML:
Ver original
  1. <?php
  2. /*
  3. *      Form del buscador!  
  4. */
  5. include_once('includes/php/libs/conectar.php');
  6. include_once('includes/php/libs/form_generate.php');
  7. $link = conectar();
  8. ?>
  9.  
  10. <select id="marca" name="marca" class="search" onclick="xajax_selectMod(document.search.marca.selectedIndex)">
  11.     <option>Todas</option>
  12.     <?php selectMarcas(); ?>
  13. <select id="mod" name="mod" class="search">
  14.                     </select>

El problema es que si bien las marcas se cargan bien, cuando clickeo sobre una, no me cargan sus modelos.
El log de errores de PHP no devuelve nada. Si me aparece ningún alert de js!.
Alguna sugerencia?
Desde ya muchas gracias.
  #2 (permalink)  
Antiguo 18/05/2011, 05:43
Avatar de aniMAYtions  
Fecha de Ingreso: diciembre-2007
Ubicación: Granada
Mensajes: 519
Antigüedad: 12 años, 10 meses
Puntos: 2
Busqueda Respuesta: Primeros pasos con Xajax, no hago funcionar una lista dependiente

Hola ramiromd.
Por qué no lo haces con javascript?
Yo también uso xajax pero en el onclick del select padre llamo a una función javascript que me rellena el select hijo.
Te pongo un ejemplo:
Código PHP:

//primero va la consulta para mostrar los resultados del select padre...

$salida .= "<select name='provincias' id='provincias' value='' onchange='javascript:rellenaPoblaciones(this.value);'>";
while(
$fila mysql_fetch_row($resultado))
{
$salida .= "<option name='provincias' value='$fila[0]'>$fila[1]</option>";
}
$salida .= "</select>";
$salida .= "<select name='poblaciones' id='poblaciones' value = ''></select>"
La función javascript llamada sería:

Código Javascript:
Ver original
  1. function rellenaPoblaciones(id_provincia)
  2. {
  3.     document.formulario.poblaciones.length=0;
  4.     /*document.formvolante.poblaciones.options[0] = new Option("","","defaultSelected","");*/
  5.     var indice=1;
  6.     <?
  7.         $conexion = conectar();
  8.         $sql_poblacion = "SELECT * from poblaciones";
  9.         $rs_poblacion = mysql_query($sql_poblacion, $conexion);
  10.         if(mysql_num_rows($rs_poblacion)>0)
  11.         {
  12.             while($row_poblacion = mysql_fetch_assoc($rs_poblacion))
  13.             {
  14.    
  15.     ?>
  16.     if(id_provincia=='<?=$row_poblacion["id_provincia"]?>')
  17.     {
  18.     document.formulario.poblaciones.options[indice] = new Option("<?=addslashes($row_poblacion["nombre_poblacion"])?>","<?=$row_poblacion["id_poblacion"]?>");
  19.     indice++;
  20.     }
  21.     <?
  22.             }
  23.         }
  24.     ?>
  25. };

Espero que te sirva de ayuda y nos cuentes qué tal.

Saludos!!
  #3 (permalink)  
Antiguo 19/05/2011, 05:36
 
Fecha de Ingreso: agosto-2010
Mensajes: 100
Antigüedad: 10 años, 1 mes
Puntos: 2
Respuesta: Primeros pasos con Xajax, no hago funcionar una lista dependiente

aniMAYtions gracias por la respuesta. Te comento, empecé a hacer un código propio. Con otro ejemplo que no son provincias y estados, sino países y equipos de fútbol.

Mis código son estos:
Generador del select de equipos
Código PHP:
Ver original
  1. function getEquipo($id_pais){
  2.     $respuesta = new xajaxResponse('ISO-8859-1');
  3.     $query = "SELECT e.idequipo, e.nombre FROM Equipo e WHERE e.idPais = $id_pais";
  4.     $res = mysql_query($query);
  5.     $new_select = "<select name='equipo'>";
  6.     while ($row = mysql_fetch_array($res)){
  7.         $new_select .= "<option value='".$row[0]."'>".htmlentities($row[1])."</option>";
  8.     }
  9.     $new_select .= "</select>";
  10.     $respuesta->addAssign("equipoDiv","innerHTML",$new_select);
  11.     return $respuesta;
  12. }

Head del html
Código HTML:
Ver original
  1.     <title>Select dependientes - Xajax!</title>
  2.     <meta http-equiv="content-type" content="text/html;charset=utf-8" />
  3.     <meta name="generator" content="Geany 0.19.1" />
  4.     <?php
  5.         include('xajax/xajax.inc.php');
  6.         $xajax = new xajax();
  7.         $xajax->setCharEncoding('ISO-8859-1');
  8.         $xajax->decodeUTF8InputOn();
  9.         include('bd.php');
  10.         conectar();
  11.         //asociamos la función creada anteriormente al objeto xajax
  12.         $xajax->registerFunction("getEquipo");
  13.         //El objeto xajax tiene que procesar cualquier petición
  14.         $xajax->processRequests();
  15.         $xajax->printJavascript("xajax/");
  16.      ?>
  17. </head>

Form en cuestión.
Código HTML:
Ver original
  1. <form name="pais_equipo">
  2.     <select name="pais" onchange="xajax_getEquipo(this.value)">
  3.         <?php getPais(); ?>
  4.     </select>
  5.     <div id="equipoDiv">
  6.     <select name="equipo">
  7.             <option value="999">Elije un pa&iacute;s</option>
  8.     </select>
  9.     </div>
  10. </form>

No sé si me estará faltando algun adeclaración. Ando medio perdido, pero al seleccionar un país e intentar pinchar el select de equipos me devuelve el siguiente error a modo de alert():

Error: the XML response that was returned from the server is invalid.
Received:
Cita:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

<head>
<title>Select dependientes - Xajax!</title>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<meta name="generator" content="Geany 0.19.1" />
<?xml version="1.0" encoding="ISO-8859-1" ?><xjx><cmd n="as" t="equipoDiv" p="innerHTML"><![CDATA[<select id='equipo'><option
value='16'>Manchester City</option><option value='17'>Manchester United</option><option value='18'>Tottenham Hotspurs</
option><option value='19'>Sunderland</option></select>]]></cmd>
</xjx>
Al parecer la consulta se genera bien, pero no entiendo por qué no genera el nuevo select :(
  #4 (permalink)  
Antiguo 19/05/2011, 05:56
Avatar de aniMAYtions  
Fecha de Ingreso: diciembre-2007
Ubicación: Granada
Mensajes: 519
Antigüedad: 12 años, 10 meses
Puntos: 2
Respuesta: Primeros pasos con Xajax, no hago funcionar una lista dependiente

Hola ramiromd.
El error que comentas no sé si será culpa de lo que te voy a comentar, pero prueba a ver y si no es, buscamos otras soluciones.
Lo primero es que no puede imprimirse ningún código html(ni espacios) antes de enlazar tu proyecto con el iframe xajax.
Eso quiere decir que antes del html y antes de ninguna otra cosa debes poner las líneas que referías:
Código PHP:
  <?php
        
include('xajax/xajax.inc.php');
        
$xajax = new xajax();
        
$xajax->setCharEncoding('ISO-8859-1');
        
$xajax->decodeUTF8InputOn();
        include(
'bd.php');
        
conectar();
        
//asociamos la función creada anteriormente al objeto xajax
        
$xajax->registerFunction("getEquipo");
        
//El objeto xajax tiene que procesar cualquier petición
        
$xajax->processRequests();
        
$xajax->printJavascript("xajax/");
     
?>
Después,
Código PHP:
<? $xajax->printJavascript("xajax/"); ?>
debe ir en el head. Yo lo tengo puesto como la primera línea después de la etiqueta.

Esto
Código PHP:
<? $xajax->processRequests(); ?>
va al final de toda la página, en la última línea, después de haber definido e implementado todas las funciones que vayas a usar.

Yo te recomiendo hacer el enlace al iframe xajax al comienzo del index y el print javascript al comienzo de la cabecera.
Después del enlace a xajax puedes enlazar otra página llamada funciones.php, por ejemplo, donde lo primero que haces es crear el objeto xajax , después configurarlo, registrar las funciones, implementarlas y lo último de todo, el processRequests.
Así verás tu código más ordenado y quizás te resulta más fácil encontrar los fallos.
Pero sólo es una sugerencia.

Saludos!!
  #5 (permalink)  
Antiguo 19/05/2011, 05:57
 
Fecha de Ingreso: agosto-2010
Mensajes: 100
Antigüedad: 10 años, 1 mes
Puntos: 2
Respuesta: Primeros pasos con Xajax, no hago funcionar una lista dependiente

Solucionado, el error era mio y de nadie más jejeje. Estaba declarando el código PHP en el header del html. Lo único que va ahí es la declaración de js <?php $xajax->printJavascript("xajax/"); ?>. Aclaro para algún desprevenido como yo jeje.
Saludos.

Etiquetas: ajax, dependiente, lista, pasos, xajax
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 13:22.