jQuery: realizar solicitudes AJAX sincrónicas

He hecho algo de jQuery en el pasado, pero estoy completamente atrapado en esto. Sé acerca de los pros y los contras del uso de llamadas ajax sincrónicas, pero aquí será necesario.

La página remota se carga (controlada con Firebug), pero no se muestra ninguna devolución.

¿Qué debo hacer diferente para hacer que mi función vuelva correctamente?

function getRemote() { var remote; $.ajax({ type: "GET", url: remote_url, async: false, success : function(data) { remote = data; } }); return remote; } 

Como está haciendo una solicitud sincrónica, debería ser

 function getRemote() { return $.ajax({ type: "GET", url: remote_url, async: false }).responseText; } 

Ejemplo – http://api.jquery.com/jQuery.ajax/#example-3

TENGA EN CUENTA: Establecer la propiedad async en falso está en desuso y en proceso de eliminación ( enlace ). Muchos navegadores, incluidos Firefox y Chrome, ya han comenzado a imprimir una advertencia en la consola si usa esto:

Cromo:

La XMLHttpRequest sincrónica en el hilo principal está en desuso debido a sus efectos perjudiciales para la experiencia del usuario final. Para obtener más ayuda, consulte https://xhr.spec.whatwg.org/ .

Firefox:

La XMLHttpRequest sincrónica en el hilo principal está en desuso debido a sus efectos perjudiciales para la experiencia del usuario final. Para más ayuda http://xhr.spec.whatwg.org/

Realmente odio el “No lo uso o estoy de acuerdo con él, así que tampoco debes usarlo” actitud que Tom tiene arriba. Casi tan malo como los ensayos considerados nocivos . Lo que me recuerda a las personas que argumentan sobre comillas simples versus dobles basadas en su preferencia IDE cuando ambas realmente se ajustan a los estándares.

Tenía un problema de ajax que solo se resolvió añadiendo async: false, . Usar las interrupciones del navegador como una excusa para argumentar a favor de la desaprobación (y eliminación) de esta función es una tontería. ¿Cómo sabes cuánto tiempo tomaría la solicitud de ajax síncrono de alguien? No todo el mundo carga o transfiere grandes cantidades de datos con estas llamadas.

Mi problema era un sistema de seguimiento que la mayoría de los navegadores no informaban el momento en que los usuarios salían de la página (antes de la onbeforeunload ), pero una vez que la solicitud ajax se hizo sincrónica, funcionó para todo excepto para Safari en iOS y otro extremo obsoleto. navegadores. La cantidad de datos que estaba enviando era extremadamente insignificante, solo dos enteros, y era una solicitud al servidor local. La interrupción de mi solicitud no es notable en absoluto , necesitaría herramientas de monitoreo para tomar nota. Mi alternativa a las llamadas ajax sincrónicas serían las llamadas ajax continuas a través de una función setInterval , que aumenta enormemente la carga del servidor y el ancho de banda. No se puede argumentar que una llamada ajax cada N segundos es mejor que una cuando alguien sale de la página. Usted simplemente no puede.

La desaprobación de solicitudes sincrónicas es un castigo para todos los desarrolladores web porque algunos de ellos lo usaban irresponsablemente.

Estás usando la función ajax incorrectamente. Como es sincrónico, devolverá los datos en línea así:

 var remote = $.ajax({ type: "GET", url: remote_url, async: false }).responseText; 

¿Qué tan remota es esa url? ¿es del mismo dominio? el código se ve bien

prueba esto

 $.ajaxSetup({async:false}); $.get(remote_url, function(data) { remote = data; }); // or remote = $.get(remote_url).responseText; 
 function getRemote() { return $.ajax({ type: "GET", url: remote_url, async: false, success: function (result) { /* if result is a JSon object */ if (result.valid) return true; else return false; } }); }