Ver Mensaje Individual
  #1 (permalink)  
Antiguo 29/08/2007, 10:05
Avatar de oabareload
oabareload
 
Fecha de Ingreso: junio-2006
Ubicación: Distrito Federal, México
Mensajes: 57
Antigüedad: 18 años, 5 meses
Puntos: 0
Exclamación Errores, pierde conexion y no muestra los datos

A veces sale un error (el 1029) que significa (creo) que pierde la conexión con el servidor. Últimamente cuando hago peticiones con Ajax no muestra los datos que se piden y tengo que cargar otra vez ese cuadro (div) o recargar la página con F5.

También otras veces logro ver que manda un error 1029 y no muestra la página. Pero todo esto sólo sucede en la aplicación que usa Ajax (XMLHttpRequest). Por que hay otra página en el mismo servidor que no presenta ese problema, y si lo llega a presentar creó que nadie se queja.

Solo quisiera saber como evitar este problema.

Código HTML:
function nuevoAjax()
    {
        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)
                    {
                        if (!xmlhttp && typeof XMLHttpRequest!="undefined")
                            {
                                xmlhttp=new XMLHttpRequest();
                            }
                    }
            }
        return xmlhttp;
}

function parte(url,divid)
    {
        var peticion = nuevoAjax();
        url = url+"&ms="+new Date().getTime();
        var obj = document.getElementById(divid);
        var loader = document.getElementById("loading");
        peticion.open("GET", url);
        peticion.onreadystatechange = function()
            {
                cargando();
                if (peticion.readyState == 4)
                    {
                        if (peticion.status == 200)
                            {
                                txt=unescape(peticion.responseText);
                                obj.innerHTML = txt;
                                terminado();
                            }
                        else
                            {
                                estado(peticion.status);
                                cargando();
                            }
                    }
            }
        peticion.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=ISO-8859-1');
        peticion.send(null);
    }

Como pueden ver no uso otra cosa del otro mundo... lo único que cambia es que es lo que pide... puede ser toda una página o solamente llenar un Select o un Input.

Les agradecería bastante el que me digan como puedo evitar que "se cuelgue" o "que marque error" o "que no cargue los datos"... así como antes de mostrar los datos, preguntar si hubo algún detalle, y en tal caso volver a tratar... ahorita mismo se me ocurrió una, pero no se como vaya a afectar:

Código HTML:
function parte(url,divid)
    {
        var peticion = nuevoAjax();
        url = url+"&ms="+new Date().getTime();
        var obj = document.getElementById(divid);
        var loader = document.getElementById("loading");
        peticion.open("GET", url);
        peticion.onreadystatechange = function()
            {
                cargando();
                if (peticion.readyState == 4)
                    {
                        if (peticion.status == 200)
                            {
                                txt=unescape(peticion.responseText);
                                obj.innerHTML = txt;
                                terminado();
                            }
                        elseif (peticion.status == 1029)
                            {
                                parte(url,divid); // Aqui vuelvo a llamar, pero el problema viene cuando de verdad sea un error malo... o algo por el estilo... tal vez solo lo ponga para el 1029... así como lo deje ahorita
                            }
                        else
                            {
                                estado(peticion.status);
                                cargando();
                            }
                    }
            }
        peticion.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=ISO-8859-1');
        peticion.send(null);
    }