Foros del Web » Programando para Internet » Javascript »

Selects INDEPENDIENTES al cargar la página

Estas en el tema de Selects INDEPENDIENTES al cargar la página en el foro de Javascript en Foros del Web. Hola chicos/as, Estoy algo despistado. Intento, al cargar una página, que se me recarguen usando javascript y llamadas asíncronas al servidor dos listados. Lo que ...
  #1 (permalink)  
Antiguo 20/05/2012, 04:24
 
Fecha de Ingreso: mayo-2012
Mensajes: 2
Antigüedad: 12 años
Puntos: 0
Selects INDEPENDIENTES al cargar la página

Hola chicos/as,

Estoy algo despistado. Intento, al cargar una página, que se me recarguen usando javascript y llamadas asíncronas al servidor dos listados. Lo que ocurre es que al llamar DOS VECES a la función, se cargan los datos en el segundo Listbox y desaparece en el primero (El primero funciona; si anulo la carga del segundo se carga el primero).

Me temo que la llamada sólo sirve para un objeto a la vez. ¿Cómo lo hago para cargar dos? Estoy intentando averiguarlo por la web pero no encuentro la solución.

JAVASCRIPT
Código:
<script type="text/javascript" language="javascript">
 
var READY_STATE_UNINITIALIZED=0; 
var READY_STATE_LOADING=1; 
var READY_STATE_LOADED=2;
var READY_STATE_INTERACTIVE=3; 
var READY_STATE_COMPLETE=4;

var parametro="";
var peticion_http;
 
function cargaContenido(url, metodo, funcion, query) {
  peticion_http = inicializa_xhr(); 
  if(peticion_http) {
    peticion_http.onreadystatechange = funcion;
    peticion_http.open(metodo, url, true);
    peticion_http.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    // alert(query);
    var query_string = "lee="+query;
    peticion_http.send(query_string);
  }
}


function inicializa_xhr() {
  if(window.XMLHttpRequest) {
    return new XMLHttpRequest();
  }
  else if(window.ActiveXObject) {
    return new ActiveXObject("Microsoft.XMLHTTP");
  }
}
 
function muestraContenido() {
  if(peticion_http.readyState == READY_STATE_COMPLETE) {
    if(peticion_http.status == 200) {
      var lista = document.getElementById(parametro);
      var datos = eval("(" + peticion_http.responseText + ")"); 
      lista.options.length = 0;
      var i=0;
      for(var codigo in datos) {
        lista.options[i] = new Option(datos[codigo], codigo);
        i++;
      }    
    }  
  }
}

 
function cargarListas() {  
  parametro="selectlugar";
  cargaContenido("./obtenerlugares.php", "POST", muestraContenido, "Consigue");
  parametro="selecttipomaterial";
  cargaContenido("./obtenertipomaterial.php", "POST", muestraContenido, "Consigue");
}
 
window.onload = cargarListas;
 
</script>
HTML

Código HTML:
<!-- Lugar  --> 
        <select name="select" class="botones" id="selectlugar">
	    <option value="">Descargando</option>
	</select>
   </p>   
 
  <!--Tipo de material -->
  <p style="text-align: justify;">
        <select name="select" class="botones" id="selecttipomaterial">
	     <option value=""> Descargando </option>
	</select>
  </p> 
  #2 (permalink)  
Antiguo 20/05/2012, 07:58
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 11 meses
Puntos: 1012
Respuesta: Selects INDEPENDIENTES al cargar la página

prueba a destruir el objeto xhr a cada invocación

<offtopic>
estás evaluando la respuesta. has probado a usar la estructura json o xml en la respuesta??
</offtopic>
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}
  #3 (permalink)  
Antiguo 20/05/2012, 14:10
 
Fecha de Ingreso: mayo-2012
Mensajes: 2
Antigüedad: 12 años
Puntos: 0
Respuesta: Selects INDEPENDIENTES al cargar la página

La verdad es que aún estoy aprendiendo y haciendo mis pinitos con AJAX. ¿Puede que no haya hecho las cosas bien? Simplemente seguí las instrucciones de cómo se hacía en otras páginas (por eso lo de la función eval).

Intenté varias cosas:
  1. peticion_http = null al final de la función muestraContenido
  2. peticion_http.abort() al final del mismo

Ninguna resultaron. ¿Es otra orden?

Lo que recupero es una cadena de datos con la estructura JSON. Por ejemplo, el código PHP del primer listado es

Código:
<?php
include("./funciones/funciones.php"); /* incluye el directorio de funciones */

include_once("./clases/class.micalendario.php");
$calendario= New micalendario(); // variable de calendario.

if ($_POST['lee']<>'') {
      $lugares=obtenerlugar($bd);
      foreach ($lugares['LUGAR'] as $key => $valor) {
          $datos_json[] = '"'.$lugares['ID'][$key].'":'.'"'.iconv("ISO-8859-1", "UTF-8",$valor.' - '.$lugares['UBICACION'][$key]).'"';
      }
      // echo '<p>'.iconv("ISO-8859-1", "UTF-8",  $cadena).'</p>';
      echo "{".implode(",", $datos_json)."}";
} else {
  // echo 'No tienes nada';
}
?>
  #4 (permalink)  
Antiguo 21/05/2012, 13:57
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 11 meses
Puntos: 1012
Respuesta: Selects INDEPENDIENTES al cargar la página

no fue muy acertada mi respuesta.

estás haciendo una llamada asíncrona, cuando ha de ser sincrona

en cuanto a json. lo estás "formando" tú, cuando podrías usar array asociativos y la función json_encode() para obtener la representación json del array.
el caso es que no es necesario, desaconsejable, usar eval(). puedes analizar grámaticamente los datos con JSON.parse(peticion_http.responseText.responseText )
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}

Etiquetas: ajax
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:04.