Foros del Web » Programando para Internet » Javascript »

AJAX mal funcionamiento en IE

Estas en el tema de AJAX mal funcionamiento en IE en el foro de Javascript en Foros del Web. Se que este tema es muy comentado y hay miles de cosas en google, pero he intentado hacer lo que he visto en tutoriales, sobre ...
  #1 (permalink)  
Antiguo 10/03/2012, 08:00
 
Fecha de Ingreso: octubre-2008
Mensajes: 91
Antigüedad: 15 años, 6 meses
Puntos: 0
AJAX mal funcionamiento en IE

Se que este tema es muy comentado y hay miles de cosas en google, pero he intentado hacer lo que he visto en tutoriales, sobre todo este:
http://www.formatoweb.com.ar/ajax/ca...o_de_datos.php
y sigue sin funcionarme en IE.

Mi problema es simple, tengo los dos tipicos select con provincia y localidad, y en el onchange de provincia, cuando cambio de opcion, se llama a un AJAX que busca las localidades y las carga en el select, os dejo el code:

Este code, carga el select de provincias, cogiendo los resultados por SQL (simple), funciona en IE :)
Código HTML:
<select name="provincia_combo" onclick="recargarLocalidades(this.value,'localidad_combo'); return false;">
     <option selected value="">Cualquiera</option>
	<?php
		conectar();
		$rs = mysql_query("Select id,nombre from provincia order by nombre ASC");
		desconectar();
		while($res = mysql_fetch_array($rs)){
		?>
			<option value="<?php echo $res['id'];?>"><?php echo $res['nombre'];?></option>
		<?php
		}
		?>
</select> 
El problema esta al llamar a la funcion de recargarLocalidades, es esta:
Código HTML:
function recargarLocalidades(provincia,combo,localidad){
     var xmlhttp=false;
     try {
	xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
     } catch (e) {
	  try {
		xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
	  } catch (E) {
		xmlhttp = false;
	  }
      }

	if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
		xmlhttp = new XMLHttpRequest();
	}

		xmlhttp.open("GET",'ajax/archivo_ajax_1.php?provincia='+provincia+'&localidad='+localidad,true);
		xmlhttp.onreadystatechange=function() {
			if (xmlhttp.readyState==4) {
				document.getElementById(combo).innerHTML =xmlhttp.responseText ;
			}
		}
		xmlhttp.send(null);		
}
Como veis, la funcion llama a archivo_ajax_1.php pasandole la provincia por GET, y aqui pongo el ajax:

Código PHP:
<?php
header
("Cache-Control: no-store, no-cache, must-revalidate");
header("Content-Type: text/html;charset=utf-8");
    include(
"../config.php");
    
$conexion mysql_connect($host_bd,$user_bd,$pass_bd);
    
mysql_query("SET NAMES 'utf8'");
    
mysql_select_db$basedatos_bd$conexion);    
    
    
$cadena ='';
    
    
$rs mysql_query("select id,nombre from localidad where provincia='".$_GET['provincia']."'",$conexion);
    while(
$res mysql_fetch_array($rs)){
        if(isset(
$_GET['localidad'])){
            if (
$res['id'] == $_GET['localidad']){    
                
$cadena.='<option selected="selected" value="'.$res['id'].'">'.$res['nombre'].'</option>';
            }else{ 
                
$cadena.='<option value="'.$res['id'].'">'.$res['nombre'].'</option>';
            }
        }else{
            
$cadena.='<option value="'.$res['id'].'">'.$res['nombre'].'</option>';
        }    
    }
    
    echo 
$cadena;
?>
La primera linea del ajax, la he sacado del tutorial que os puse antes, se supone que la cache en IE solo carga la primera vez, y a partir de ahi, siempre carga de memoria, por esa razon pensaba que me devolvia siempre vacio (es decir, no me rellenaba el select de localidad). Tras ponerle esa linea, sigue sin mandarme el resultado el ajax desde IE, como puedo solucionarlo?

Un saludo, y gracias ;)
  #2 (permalink)  
Antiguo 10/03/2012, 15:38
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 10 meses
Puntos: 1567
Respuesta: AJAX mal funcionamiento en IE

Hola @nitsuga1986

Te dejo un par de observaciones que quizás te ayuden a solucionarlo

Si la idea es hacer selects dependientes, y en tu caso según la provincia elegida crear un select con localidades, primero, esto no está del todo bien
<select name="provincia_combo" onclick="recargarLocalidades, el ebento debería ser onchange, si no, el valor siempre sería "Cualquiera", a menos que hagas un select de tipo multiple, pero eso al menos no lo has hecho.

Un ejemplo quedaría...


Código HTML:
Ver original
  1. <select name="provincia_combo" onchange="recargarLocalidades('localidades.php',this.value,'combo2'); return false;" >
  2.      <option selected value="cualquiera">Cualquiera</option>
  3.      <option value="La Pampa">La Pampa</option>
  4.      <option value="Mendoza">Mendoza</option>
  5.      <option value="Santa Fe">Santa Fe</option>

Vamos con la script ajax


Código Javascript:
Ver original
  1. <script type="text/javascript">
  2. //<![CDATA[
  3.  
  4. //creas el objeto ajax, lo haces aparte para poder volver a usarlo si hace falta
  5. function ajaxFunction() {
  6.   var xmlHttp;
  7.  
  8.   try {
  9.    
  10.     xmlHttp=new XMLHttpRequest();
  11.     return xmlHttp;
  12.   } catch (e) {
  13.    
  14.     try {
  15.       xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
  16.       return xmlHttp;
  17.     } catch (e) {
  18.      
  19.       try {
  20.         xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
  21.         return xmlHttp;
  22.       } catch (e) {
  23.         alert("Tu navegador no soporta AJAX!");
  24.         return false;
  25.       }}}
  26. }
  27.  
  28. // Ahora creas la función
  29. function recargarLocalidades(_pagina,valor,capa) {
  30.     var ajax;
  31.     ajax = ajaxFunction();
  32.     var urlget = _pagina + '?provincia=' + valor; // definis la url completa con los parámetros
  33.     ajax.open("GET", urlget, true);
  34.     ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  35.  
  36.     ajax.onreadystatechange = function() {
  37.         if (ajax.readyState==1){
  38. // este es un gif a manera de loader, lo podés obviar
  39.             document.getElementById(capa).innerHTML = "<img src='ajax-loader2.gif' align='center'\/><br \/> Aguarde por favor...";
  40.                  }
  41.         if (ajax.readyState == 4) {
  42.            
  43.                 document.getElementById(capa).innerHTML=ajax.responseText;
  44.              }}
  45.              
  46.     ajax.send(null);
  47. }
  48.  
  49.  
  50. //]]>
  51. </script>
y ahora un php simplificado, localidades.php

Código PHP:
Ver original
  1. <?php
  2. if($_GET['provincia'] == "Santa Fe"){
  3. echo "<select><option>Rosario</option><option>Santa fe</option></select>";
  4. }else{
  5. echo "otra provincia";
  6. }
  7. ?>

Ahora otra cosa, si en el primer fragmento el mySql te funciona bien y te genera la lista de provincias, por que no hacer simplemente lo mismo en localidades.php (lo que vos llamas archivo_ajax_1.php ), no entiendo porque tenes ahi $_GET['localidad']
. Eso se necesitaría de haber un tercer combo, simplemente deberias hacer (porque es una condición necesaria el definir la provincia para poder generar las localidades
haces
Código PHP:
Ver original
  1. if(isset($_GET['provincia'])){
  2. // consulta
  3. // echo select
  4. //while
  5. //echo /select
  6. }else{
  7. echo "error, no se definio provincia";
  8. }

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.

Etiquetas: ajax, funcion, funcionamiento, google, html, php
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 19:14.