2011-03-25 20 views
5

Pregunta realmente simple. Yo tratando de probar un servicio web reparador que estoy desarrollando, y tienen esta simple llamada AJAX (jQuery):Llamada ajax simple parece estar bloqueando

<script type="text/javascript"> 
    $(document).ready(function() { 
    var url = '/index.php/gettest/reallyLongRequest';  
    $.ajax({ 
     url: url, 
     dataType:'text', 
     success:function(data) { $('#result').html(data);}, 
     error:function(xhr,err,e) { alert ("Error: " + err);} 
    });     
    }); 
</script> 

Esto se ejecuta cuando se carga la página. Mientras se ejecuta, la página está bloqueando; es decir, (puedo ver el reloj de arena junto al puntero del mouse) no se pueden manejar otras acciones del usuario. (Por cierto, esta solicitud de obtención en particular, intencionalmente, tarda mucho tiempo en regresar).

¿Por qué es esto? A (asincrónico) JAX ¿verdad? Obviamente estoy cometiendo un error de principiante. Alguna idea, por favor?

Cuando intento esto utilizando javascript simple (sin biblioteca) funciona como se esperaba. ¿Tiene esto algo que ver con el manejo de Jquery del xhr onreadystatechange?

Gracias por mirar.

EDITAR: varias personas han sugerido configurar async: true, que, como ocurre, es el valor predeterminado en jquery, y como tal no tiene ningún efecto.

EDITAR: Como he mencionado anteriormente, si uso javascript simple y lo comienzo con un temporizador, por ejemplo, window.setInterval(function() { startLongPoll(); }, 5000) Se actualiza como se espera, sin parecer bloqueado. Ideas, alguien?

+0

no tengo ni idea de si esto está relacionado, pero ¿ha intentado en un navegador diferente? –

+0

Sucede en todos los navegadores. –

+1

Parece que mi declaración anterior no era cierta; luego de una inspección adicional solo ocurre en google chrome. ¿Algunas ideas? –

Respuesta

3

Aquí es un ejemplo de lo que hice para resolver el problema:

jQuery(document).ready(function() { 
    setTimeout(function() { 
    $.getJSON("veryLongRequest", function(json) { 
    alert("JSON Result: " + json[0].id);}); 
    }, 500); // You may need to adjust this to a longer delay. 
}); 

Nota: Estoy usando el método jQuery corta a mano, "getJSON", que es una envoltura para la llamada ajax con el tipo de datos establecido en "json". Sin embargo, esta solución funcionará para todas las solicitudes de Ajax.

Referencia:

Stop the browser "throbber of doom" while loading comet/server push iframe

-3

posible que desee para tratar de Añadir async:true

<script type="text/javascript"> 
     $(document).ready(function() { 
     var url = '/index.php/gettest/reallyLongRequest';  
     $.ajax({ 
      url: url, 
      async:true, 
      dataType:'text', 
      success:function(data) { $('#result').html(data);}, 
      error:function(xhr,err,e) { alert ("Error: " + err);} 
     });     
     }); 
    </script> 
+0

Rápido para el sorteo que eres. – RSG

+2

async es verdadero por defecto. ¿Por qué eso ayudaría? –

+0

@Chris Kooken como JB Nizet dijo, async es cierto por defecto. Para estar seguro, lo intenté y todavía tengo el mismo problema. ¿Alguna otra idea? –

0

creo que esto debería defecto cierto, pero trate de añadir async: true a su parámetro JSON ajax.

0

¿Funciona el código siguiente como se esperaba?

<script type="text/javascript"> 
    //$(document).ready(function() { 
    var url = '/index.php/gettest/reallyLongRequest';  
    $.ajax({ 
     url: url, 
     dataType:'text', 
     success:function(data) { $('#result').html(data);}, 
     error:function(xhr,err,e) { alert ("Error: " + err);} 
    });     
    //}); 
</script> 
+0

Lamentablemente, no es así. Mismo problema. Gracias por la sugerencia, sin embargo. Además, vea mi último EDIT –

Cuestiones relacionadas