2012-08-31 51 views
6

Ajax usa devoluciones de llamadas, ya que es A sincrónico.cómo bloquear en la llamada ajax (quiero bloquear)

Deseo que mi llamada al bloque de URL remoto hasta que haya alguna respuesta, exactamente como en Ajax, pero sin la parte asincrónica, o debo decir que quiero hacer una llamada JAX.

¿Hay alguna técnica para hacer que suceda lo siguiente (utiliza jQuery) (... solución con jQuery o cualquier otra cosa):

function get_data() { 
    $.ajax({ 
     type : "POST", 
     url : "/foo" 
    }).done(function(data, textStatus, jqXHR) { 
     return data; 
    }).fail(function(jqXHR, textStatus) { 
     return null; 
    }); 
} 

var data = get_data(); 
// process `data` 

me pregunto - quieren aprender.

En realidad, hay momentos en los que bloquear hasta que una respuesta se ajuste bien. No digo que quiera bloquear el navegador, solo el tiempo de ejecución del script.

+0

escritura 'asíncrono: false' con la opción ajax – diEcho

+0

jQuery $ .ajax tiene la propiedad' async'. Si lo configura en falso, bloqueará. – osoner

+0

posible duplicación de [Llamadas síncronas con jquery] (http://stackoverflow.com/questions/2942544/synchronous-calls-with-jquery) - no se puede bloquear el tiempo de ejecución sin bloquear el navegador. Y no puede devolver la respuesta de las devoluciones de llamada, tiene que asignarla a una variable y devolverla desde la función real. –

Respuesta

10

Puede simplemente configurar el booleano async : false al usar jQuery (check the docs). Tome nota: A partir de jQuery 1.8, el uso de async: falso con jqXHR ($ .Deferred) está en desuso; debe usar las devoluciones de llamada completas/exitosas/de error.

Si no desea utilizar jQuery o desea saber qué está pasando debajo del capó, read this.

xmlhttp.open("GET","ajax_info.txt",false); 
xmlhttp.send(); 
document.getElementById("myDiv").innerHTML=xmlhttp.responseText; 

pregunto por qué no quiere que sea asíncrono aunque ...

+1

Primero, gracias. Segundo, la nota con respecto a jQuery 1.8 no está clara. Además, los documentos dicen acerca de 'async' lo siguiente:' .. ya que puede hacer que el navegador deje de responder'. ¿Cómo evito el bloqueo del navegador? Esto es obviamente inaceptable. – Poni

+0

En otro pensamiento, es otra pregunta. Gracias de nuevo. – Poni

+0

@Poni ¿Encontraste la respuesta a esta otra pregunta que mencionaste? ¿Creaste una pregunta de stackoverflow para eso? cuidado de vincular a ella? – Magne