Foros del Web » Programando para Internet » Javascript »

Abortar conexion ajax al enviar otro request

Estas en el tema de Abortar conexion ajax al enviar otro request en el foro de Javascript en Foros del Web. En el servidor, con php hago un loop infinito hasta que se cumpla cierta condicion, el tiempo maximo de ese loop es de 20 segundos, ...
  #1 (permalink)  
Antiguo 26/07/2009, 15:21
Avatar de _eNGeLs_  
Fecha de Ingreso: noviembre-2007
Ubicación: CDE, Paraguay
Mensajes: 278
Antigüedad: 16 años, 4 meses
Puntos: 4
Abortar conexion ajax al enviar otro request

En el servidor, con php hago un loop infinito hasta que se cumpla cierta condicion, el tiempo maximo de ese loop es de 20 segundos, despues de eso cierra la conexion enviando un 'timeout' como respuesta. Luego, se vuelve a crear una conexion y asi.

El problema es este:
Cuando se hace un request, el servidor hace el loop, y si el usuario hace otro request cuando todavia no se cerro la conexion anterior, el servidor espera a que primero se cierre la conexion anterior para procesar la nueva. (Estoy usando Apache en linux).

Una posible solucion:
Al realizar el segundo request se aborte el primero.
Creo necesito usar el metodo abort() del objeto 'rpc'
Pero no se donde deberia ir eso..

alguna ayuda??

Código:
function sendRequest()
{
    var rpc=aj();
    if(rpc){
        rpc.open('POST','center.php',true);
        rpc.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
        var aEnviar='';
        for(ii=0; ii<arguments.length;ii++){
            aEnviar+=arguments[ii].desc+'='+encodeURIComponent(arguments[ii].dato)+'&';
        }
        rpc.onreadystatechange=function(){
            if(rpc.readyState==4){
                    if(rpc.status >= 200 && rpc.status < 300)
                    {
                        //Handle Response
                        handleResponse(rpc.responseText);
                    }else{
                        alert('Se perdio la conexion');
                    }
            }else{
                //precarga
            }
        }
        rpc.send(aEnviar);
    }
}
function aj(){
    if(window.XMLHttpRequest){
        return new XMLHttpRequest();
    }
    else{
        try{
            return new ActiveXObject('Microsoft.XMLHTTP');
        }catch(e){
            alert('tu navegador no soporta ajax');
            return false;
        }
    }
}
__________________

  #2 (permalink)  
Antiguo 26/07/2009, 16:16
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 19 años, 11 meses
Puntos: 834
Respuesta: Abortar conexion ajax al enviar otro request

Deberías plantear tu pegunta en el foro de AJAX. El objeto AJAX posee de manera nativa un método llamado abort, aunque por lo que estás mencionando acerca del bucle infinito, el control deberías hacerlo del lado del servidor para que el bucle pueda interrumpirse. Te sugiero que revises un poco este enlace: http://www.forosdelweb.com/2813329-post33.html
  #3 (permalink)  
Antiguo 26/07/2009, 17:01
Avatar de _eNGeLs_  
Fecha de Ingreso: noviembre-2007
Ubicación: CDE, Paraguay
Mensajes: 278
Antigüedad: 16 años, 4 meses
Puntos: 4
Respuesta: Abortar conexion ajax al enviar otro request

Gracias! he aprendido algunas cosas.. =D
pero.. que pasa si el usuario hace un request mientras esta activo el poll? en mi caso, recien al cerrarse la conexion por timeout o porque hay un mensaje nuevo se procesa este segundo request..

hay alguna forma de que se procesen los 2 al mismo tiempo? o en todo caso que se cancele la primera, se procese la segunda?

grax!
__________________

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 09:51.