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

IE no va al servidor en busca de nuevos datos

Estas en el tema de IE no va al servidor en busca de nuevos datos en el foro de Frameworks JS en Foros del Web. Hola chic@s me he aquí con un problema que ha logrado revivir mi molestia hacia el IE. Tengo un input en el cual se ingresan ...
  #1 (permalink)  
Antiguo 25/02/2006, 10:02
 
Fecha de Ingreso: agosto-2005
Ubicación: Argentina, Capital Federal
Mensajes: 435
Antigüedad: 19 años, 4 meses
Puntos: 2
IE no va al servidor en busca de nuevos datos

Hola chic@s me he aquí con un problema que ha logrado revivir mi molestia hacia el IE.
Tengo un input en el cual se ingresan datos, se presiona un "OK" y esos datos son enviados a mi base de datos sin recargar. Luego al lado tengo un boton el cual al presionarlo se despliega una lista con todas las entradas contenidas en esa base de datos. Esto va perfecto en Mozilla Firefox, pero en IE cuando ingreso un dato y no recargo (en realidad hasta q no lo cierro y lo vuelvo a abrir), luego al cliquear el botón no aparece esa nueva opción en la lista sino las que habia anteriores al/los ingreso/s.
He colocado banderas para localizar el problema y he descubierto que a pesar de que el IE debería ir al servidor en busca de los nuevos datos, nunca lo hace y me trae el listado con los datos de el "click anterior".
Mi problema es similar el de este post: http://www.forosdelweb.com/f127/por-que-no-actualiza-368570/ que no obtuvo respuestas.

Mi codigo simplificado es el siguiente:

El proceso
Código PHP:
<?php
$entrar
=$_GET["ingreso"];
if(
$entrar)
{
    
$coneccion=mysql_connect("localhost""root""") or die(mysql_error());
    
mysql_select_db("ajax"$coneccion) or die(mysql_error());

    
mysql_query("INSERT INTO autocompletador (nombre) VALUES ('$entrar')");
}

if(
$_GET["datos"])
{
    
$coneccion=mysql_connect("localhost""root""") or die(mysql_error());
    
mysql_select_db("ajax"$coneccion) or die(mysql_error());

    
$consulta=mysql_query("SELECT * FROM autocompletador");
    while(
$registro=mysql_fetch_row($consulta))
    {
        echo 
$registro[1]."<br />";
    }
}
?>
El HTML
Código PHP:
<!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">
<
head>
<
script language="javascript">
function 
nuevoAjax()

    
/* Crea el objeto AJAX. Esta funcion es generica para cualquier utilidad de este tipo, por
    lo que se puede copiar tal como esta aqui */
    
var xmlhttp=false
    try 
    { 
        
// Creacion del objeto AJAX para navegadores no IE
        
xmlhttp=new ActiveXObject("Msxml2.XMLHTTP"); 
    }
    catch(
e)
    { 
        try
        { 
            
// Creacion del objet AJAX para IE 
            
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
        } 
        catch(
E) { xmlhttp=false; }
    }
    if (!
xmlhttp && typeof XMLHttpRequest!='undefined') { xmlhttp=new XMLHttpRequest(); } 

    return 
xmlhttp
}

function 
nuevoDato()
{
    var 
div=document.getElementById("div"), campo=document.getElementById("input_1");
    var 
valor=campo.value;

    
ajax=nuevoAjax();
    
ajax.open("GET""prueba_proceso.php?ingreso="+valortrue);

    
ajax.send(null);
}

function 
muestra()
{
    var 
div=document.getElementById("div");
    
div.innerHTML="";
    
    
ajax=nuevoAjax();
    
ajax.open("GET""prueba_proceso.php?datos=si"true);
    
    
ajax.onreadystatechange=function()
    {
        if (
ajax.readyState==4)
        {
            
div.innerHTML=ajax.responseText;
        }
    }
    
ajax.send(null);
}
    
    
</script>
</head>

<body>
<input type="text" id="input_1" />
<input id="boton_1" onClick="nuevoDato();" type="button" value="Ok" />
<div id="div"></div>
<br /><br />
<input id="boton_2" onClick="muestra();" type="button" value="Mostrar" />

</body>
</html> 
Mi pregunta es: ¿Por que el IE asume que no hay que ir al servidor por nuevos datos y me trae datos antiguos si mis funciones le dicen claramente que lo haga?

Se agradece de antemano.
Saludos.
__________________
R4DS en español | R4DS en inglés
  #2 (permalink)  
Antiguo 25/02/2006, 13:21
 
Fecha de Ingreso: agosto-2005
Ubicación: Argentina, Capital Federal
Mensajes: 435
Antigüedad: 19 años, 4 meses
Puntos: 2
Bueno hice un par de pruebas y al no lograr buenos resultados intenté usar POST en lugar de GET. Mi sorpresa es que si funcionó, vaya uno a saber por qué. La función modificada quedó así:

Código PHP:
function muestra()
{    
    var 
div=document.getElementById("div");
    
div.innerHTML="";
    
    var 
ajax=nuevoAjax();
    
ajax.open("POST""prueba_proceso.php?"true);
    
ajax.setRequestHeader('Content-Type''application/x-www-form-urlencoded');
    
ajax.send("datos=si");
    
    
ajax.onreadystatechange=function()
    {
        if (
ajax.readyState==4)
        {
            
alert(ajax.status);
            
div.innerHTML=ajax.responseText;
        }
    }

Saludos!
__________________
R4DS en español | R4DS en inglés
  #3 (permalink)  
Antiguo 03/03/2006, 16:48
Avatar de Quest  
Fecha de Ingreso: diciembre-2002
Ubicación: Santiago
Mensajes: 129
Antigüedad: 22 años
Puntos: 2
Gracias men.

Justo hiba a postear el mismo problema pero me dio por leer este antes y tb me funko a mi en IE, de verdad muchas gracias.
__________________
http://victorsanmartin.com
Web Developer
http://www.guiasitios.cl
  #4 (permalink)  
Antiguo 01/04/2006, 08:39
 
Fecha de Ingreso: julio-2005
Mensajes: 6
Antigüedad: 19 años, 5 meses
Puntos: 0
Gracias.... Viejo

Hermano, espero seas gordito; porque vale lo que pesas en oro. Estaba con ese chicharron hace rato... Mil gracias.
  #5 (permalink)  
Antiguo 03/04/2006, 01:28
Avatar de Intrepido  
Fecha de Ingreso: diciembre-2002
Ubicación: Barcelona
Mensajes: 118
Antigüedad: 22 años
Puntos: 0
Gracias yo tb arrastraba este problema ^^
  #6 (permalink)  
Antiguo 03/04/2006, 09:56
 
Fecha de Ingreso: agosto-2005
Ubicación: Argentina, Capital Federal
Mensajes: 435
Antigüedad: 19 años, 4 meses
Puntos: 2
Me alegra que les haya resultado útil.

Cita:
Iniciado por fogoroa
Hermano, espero seas gordito; porque vale lo que pesas en oro. Estaba con ese chicharron hace rato... Mil gracias.
Jaja como me has hecho reir

Les comento también que hay una solución a esto un poco mas "prolija" que simplemente consiste en utilizar las cabeceras de no-cache (no lo probé, pero se dice que funciona), y también existe otra posibilidad que es añadir a la URL una variable aleatoria que cambia en cada "open", lo que le hace creer al IE que estamos cargando "algo distinto" a lo que ya había y le obliga a hacer la recarga como corresponde. Ambas soluciones están explicadas en algunos POST de este mismo foro.

Les mando saludos.
__________________
R4DS en español | R4DS en inglés
  #7 (permalink)  
Antiguo 03/04/2006, 10:53
Avatar de Wdeah  
Fecha de Ingreso: julio-2005
Ubicación: Argentina
Mensajes: 109
Antigüedad: 19 años, 4 meses
Puntos: 0
hola, el problema es porque la pagina queda guardada en cache.
lo que tienen que hacer para evitar esto es poner los headers correspondientes al principio de la pagina php..
ejemplo:
Código PHP:
header("Cache-Control: no-store, no-cache, must-revalidate"); 
y con esto se soluciona todo
un saludo
  #8 (permalink)  
Antiguo 01/07/2006, 09:02
Avatar de shakaran  
Fecha de Ingreso: agosto-2005
Ubicación: España - Ciudad Real
Mensajes: 374
Antigüedad: 19 años, 4 meses
Puntos: 7
Tengo un problema con el GET y tambien utilice POST y nada...creen ustedes que sera por lo del cache? Les dejo el link del hilo:

http://www.forosdelweb.com/f127/onchange-no-actualizado-406008/
  #9 (permalink)  
Antiguo 30/11/2007, 11:59
 
Fecha de Ingreso: noviembre-2007
Mensajes: 2
Antigüedad: 17 años
Puntos: 0
Re: IE no va al servidor en busca de nuevos datos

HOLA, ESPERO ME PUEDAN AYUDAR, YO TENGO UN PROBLEMA PARECIDO AL QUE COMENTARON USTEDES, EL CUAL ES QUE IE NO REFLEJA LOS CAMBIOS REALIZADOS EL JAVASCRIPT CUANDO NECESITO CREAL UN OBJETO XMLHTTPREQUEST O BIEN UN
ActiveXObject(MSXML2.DOMDocument.5.0); PARA PODER PEDIR UN XML DESDE EL SERVIDOR Y TRAER UN DOC XML Y HACER ALGO CON DICHO ARCHIVO, APESAR DE QUE REFRESCO LA PANTALLA, LIMPIO HISTORIAL, Y ARCHIVOS TEMPORALES NO ME REFLEJA LOS CAMBIOS EN EL IE, LA DOC QUE HE CHECADO DICE QUE IE LANZARA UN ERROR CUANDO NO SE CREA EL OBJETO ActiveXObject(MSXML2.DOMDocument.5.0) O BIEN SI NO ESTA INSTALADO EL MSXML. ESPERO ME PUEDAN AYUDAR YA QUE LLEVO DIAS CON ESTO Y NO LO HE PODIDO SOLUCIONAR.
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

SíEste tema le ha gustado a 1 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 03:53.