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

cargar listbox con xajax

Estas en el tema de cargar listbox con xajax en el foro de Frameworks JS en Foros del Web. hola a todos! Es la primera vez que tomo contacto con ajax y xajax. Lo que quiero hacer seguro que es muy sencillo, pero no ...
  #1 (permalink)  
Antiguo 19/06/2007, 05:35
 
Fecha de Ingreso: febrero-2006
Mensajes: 174
Antigüedad: 18 años, 10 meses
Puntos: 0
cargar listbox con xajax

hola a todos!
Es la primera vez que tomo contacto con ajax y xajax.
Lo que quiero hacer seguro que es muy sencillo, pero no tengo ni idea de cómo hacerlo.
Tengo un listbox con una serie de ciudades, y según la ciudad seleccionada, quiero mostrar los barrios de esa ciudad.

Para ello, tengo el siguiente código:

Código PHP:
<?
require("GestorPisos.php");
$gp=new GestorPisos();
?>
 <?
require ('xajax/xajax.inc.php'); 
$xajax = new xajax(); 
function 
cargarListBox($zona){
    
$res=$gp->getZona($localidad);
    
$respuesta = new xajaxResponse();   
    
$respuesta->addAssign("zona""innerHTML"$res);
  
    return 
$respuesta->getXML(); 
}
$xajax->registerFunction("cargarListBox"); 
$xajax->processRequests(); 
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>

.....etc
$gp->getZona($localidad) llama a la función del GestorPisos que obtiene los diferentes barrios de una localidad.

Cuando seleccione una ciudad, tengo lo siguiente:

Código PHP:
<select name="select" onChange="xajax_cargarListBox(zona)">
                 <option value="Donosti">Donosti</option>
                 <option value="Lasarte">Lasarte</option>
          </select>
                                                                                                                   <select name="zona" >               

 <?
                                    $res
=$gp->pisosZona(xajax_cargarListBox(localidad))();                while($row=mysql_fetch_row($res)){
                                                    echo 
"<option value=".$row[0].">".$row[0]."</option>";
                                                        }                                          
                                                          
?>
                                                        
</select>
y la función javascript
Código PHP:
function xajax_cargarListBox(zona){

return 
document.formulario.localidad.getSelectedItem();


pero no tengo ni idea de si esto se hace así o no... alguien podría explicarmelo un poco?
esque todos los ejemplos que he encontrado de xajax actualizan un texto, o algo así, pero ninguna carga listboxes.

Muchas gracias
  #2 (permalink)  
Antiguo 19/06/2007, 05:42
Avatar de kaninox  
Fecha de Ingreso: septiembre-2005
Ubicación: In my House
Mensajes: 3.597
Antigüedad: 19 años, 3 meses
Puntos: 49
Re: cargar listbox con xajax

esto ya ha pasao muchas veces :D

http://php.novacreations.net/viewtopic.php?t=53

hay ta resuelto :)
__________________
Gokuh Salvo al mundo. PUNTO!!!!
  #3 (permalink)  
Antiguo 19/06/2007, 10:18
 
Fecha de Ingreso: febrero-2006
Mensajes: 174
Antigüedad: 18 años, 10 meses
Puntos: 0
Re: cargar listbox con xajax

El código que está en el link que me has facilitado está con ajax, no con xajax. A mi me gustaría utilizar esta librería, ya que dicen que es mucho más sencilla y eficiente.
  #4 (permalink)  
Antiguo 19/06/2007, 12:35
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Re: cargar listbox con xajax

Dale una leida a esto:

http://wiki.xajaxproject.org/Tutoria...ponse_Commands

Saludos.
  #5 (permalink)  
Antiguo 20/06/2007, 03:21
 
Fecha de Ingreso: febrero-2006
Mensajes: 174
Antigüedad: 18 años, 10 meses
Puntos: 0
Re: cargar listbox con xajax

Muchas gracias GatorV!

Me ha sido de gran ayuda ese link. De todas formas, estoy un poco "verde" en este asunto, y sigo sin saber qué hacer con todo esto.
Haber, he hecho la función que carga los datos en un listbox tras realizar una consulta a la base de datos. Pero cómo tengo que llamar a esta función?? desde javascript?? esque no tengo ni idea.

haber, os pongo esto:

Código PHP:
<?
include("GestorPisos.php");

require (
'xajax/xajax.inc.php'); 
$xajax = new xajax(); 
class 
myXajaxResponse extends xajaxResponse

{  
  var 
$gp;
 
    function 
addCreateOption($sSelectId$sOptionText$sOptionValue)  
    {  
        
$this->addScript("addOption('".$sSelectId."', '".$sOptionText."', '".$sOptionValue."');");
    }

    function 
addCreateOptions($sSelectId$aOptions)
    {
        foreach( 
$aOptions as $sOptionText => $sOptionValue)
        {
            
$this->addCreateOption($sSelectId$sOptionText$sOptionValue);
        }
    }
    function 
cargarListBox($localidad){
        
$gp=new GestorPisos();
        
        
$res=$gp->getZonas($localidad);
        
        
$i=0;
        while(
$row=mysql_fetch_row($res)){
            
$array[$i]=$row[0];
            
$i++;
        }
        
$this->addCreateOptions("zona"$array);
    }
}
$objResponse = new myXajaxResponse();

$objResponse->cargarListBox($localidad);
 
return 
$objResponse;
$xajax->registerFunction("cargarListBox"); 
$xajax->processRequests(); 
?>
luego la función javascript:

Código:
function cargarListBox(localidad){
	xajax_cargarListBox(localidad)
}
y por último, el evento de seleccionar una opción en el primer listbox.

Código PHP:
<select name="localidad" onChange="xajax_cargarListBox(document.forms.formulario.localidad.getSelectedItem())"
Aparte, me da este error: Warning: Invalid argument supplied for foreach() in c:\wamp\www\etxaniz(v.8)\site\areacliente.php on line 18

Así que estoy bloqueadísima, alguien me puede ayudar??

graciasss
  #6 (permalink)  
Antiguo 20/06/2007, 10:55
 
Fecha de Ingreso: febrero-2006
Mensajes: 174
Antigüedad: 18 años, 10 meses
Puntos: 0
Re: cargar listbox con xajax

Haber, he conseguido avanzar un pokito. Ahora no me da ningún error, pero los combobox no se cargan. Vamos, que no hace nada.
Tengo todo el código en la misma página php. Os adjunto todo lo relativo a xajax y los combobox, haber si alguien me ayuda.

Código PHP:
<?
include("GestorPisos.php");
require (
"xajax/xajax.inc.php"); 

//echo "printJavaScript";


class myXajaxResponse extends xajaxResponse

{  
  var 
$gp;
  
    function 
addCreateOption($sSelectId$sOptionText$sOptionValue)  
    {  
//echo "entro a addCreateOption";
        
$this->addScript("addOption('".$sSelectId."', '".$sOptionText."', '".$sOptionValue."');");
    }

    function 
addCreateOptions($sSelectId$aOptions)
    {
//echo "entro a addCreateOptions";echo gettype($aOptions);echo gettype($sSelectId);
    
        
foreach( $aOptions as $sOptionText => $sOptionValue)        
        {
            
$this->addCreateOption($sSelectId$sOptionText$sOptionValue);
        }
    }
    function 
cargarListBox($localidad){
    
//echo "entro a cargarListBox";
    
if($localidad==""$localidad="Donosti";
        
$gp=new GestorPisos();
        
        
$res=$gp->getZonas($localidad);
        
        
$i=0;
        
$array;
        
//echo "localidad:"; echo $localidad;
        //echo "entro aquí";
        
while($row=mysql_fetch_row($res)){
        
//echo"entro aquí2";
            
$array[$i]=$row[0];//echo $row[0];
            
$i++;
        }
                
//print_r($array); //echo gettype($array);
        
$this->addCreateOptions("zona"$array);
    }
}


//echo "voy a ejecutar objResonse1";
$objResponse = new myXajaxResponse();
$xajax = new xajax();
//echo "voya ejectuar objResponse->cargarListBox(localidad);";
//$objResponse->cargarListBox($localidad);
//echo "he ejecutado cargarlistbox";

//$xajax->registerFunction("cargarListBox"); //echo "1";
$xajax->registerFunction("cargarListBox", &$objResponse"cargarListBox");
$xajax->processRequests(); //echo "2";
//return $objResponse;
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<html>
<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Administraciones Etxaniz---Etxaniz Administrazioak</title>
<?
$xajax
->printJavascript("xajax/"); 
?>
<script language="JavaScript" type="text/JavaScript">
<!--
function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

//-->
xajax_cargarListBox("Donosti");
</script>
etcetcetc
Código PHP:
<select name="localidad" onChange="xajax_cargarListBox(document.formulario.localidad.value)">
                                                            <!---->
                                                            <option value="Donosti" selected="selected">Barcelona</option>
                                                            <option value="Madrid">Lasarte</option>
                                                         </select>
                                                        </label></td>
                                                      <td><span class="m_text"><span class="Estilo14"><? echo $zonacli?></span></span></td>
                                                      <td><span class="Estilo15">
                                                        <select name="zona" >
                                                          <option value="las"><? echo $selezona?></option>
                                                         
                                                        </select>
Haber si alguien me dice qué le pasa. Muchs gracias!!
  #7 (permalink)  
Antiguo 25/06/2007, 02:42
 
Fecha de Ingreso: febrero-2006
Mensajes: 174
Antigüedad: 18 años, 10 meses
Puntos: 0
Re: cargar listbox con xajax

Nadie me puede ayudar??

haber, he simplificado el código, pero sigue sin funcionar. Alguien sabrá cómo solucionarlo, no??

Os pongo el código otra vez:

Código PHP:
<?
include("GestorPisos.php");
require (
"xajax/xajax.inc.php");  
  
$xajax = new xajax();
    function 
cargarListBox($localidad){
    
        
$gp=new GestorPisos();
        
        
$res=$gp->getZonas($localidad);
        
$respuesta= new xajaxResponse();
        while(
$row=mysql_fetch_row($res)){
            
$respuesta->addScript("addOption('zona', '".$row[0]."', '".$row[0]."');");
        
        }
return 
$respuesta;
}


$xajax->registerFunction("cargarListBox");
$xajax->processRequests(); 

?>
antes de cerrar el head

Código PHP:
<?
$xajax
->printJavascript("xajax/"); 
?>
Evento asociado a cambiar de valor en el combobox

Código HTML:
<select name="localidad" onChange="xajax_cargarListBox(document.formulario.localidad.value)"> 
"zona" es el nombre del combobox que se tiene que recargar automaticamente.

Cuando selecciono algo en el combobox "localidad" el puntero del ratón se convierte en el reloj de arena, osea, que algo procesa, pero no se carga nada en el otro combobox. Sigue vacío...

que alguien me ayude!!!

graciasss
  #8 (permalink)  
Antiguo 25/06/2007, 05:15
 
Fecha de Ingreso: febrero-2006
Mensajes: 174
Antigüedad: 18 años, 10 meses
Puntos: 0
Re: cargar listbox con xajax

Buenas noticias!
he conseguido que funcione... para el explorer!!! no para firefox"!

El problema estaba en la función javascript que añadía las diferentes opciones al combobox. Por alguna extraña razón no funcionaba, y la he cambiado y así funciona para el explorer:

Código PHP:
<?
include("GestorPisos.php");
require (
"xajax/xajax.inc.php");  
  

    function 
cargarListBox($localidad){
    
        
        
$gp=new GestorPisos();
        
        
$res=$gp->getZonas($localidad);
        
$respuesta= new xajaxResponse();
        
$respuesta->addScript("deleteOptions();");
        
//$respuesta->addScript("document.formulario.zona[0].length=0;");
        
while($row=mysql_fetch_row($res)){
            
$respuesta->addScript("addOption('zona', '".$row[0]."', '".$row[0]."');");
        }
return 
$respuesta->getXML();
}

$xajax = new xajax();

$xajax->registerFunction("cargarListBox");
$xajax->processRequests(); 
//$xajax->debugOn();
?>

Código:
function addOption(selectObject,optionText,optionValue) {
    var objOption = new Option(optionText,optionValue);
    document.getElementById(selectObject).options.add(objOption);		
}
function deleteOptions()//,optionRank){
 { 
document.forms[0].zona.options.length = 0; 
}
si alguien sabe cómo hacer para que funcione en firefox que me avise!!jejej
graciasss
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 23:10.