Lo que espera es el sincrónica (bloqueo) Tipo de solicitud.
var it_works = false;
jQuery.ajax({
type: "POST",
url: 'some_file.php',
success: function (data) {
it_works = true;
},
async: false // <- this turns it into synchronous
});
// Execution is BLOCKED until request finishes.
// it_works is available
alert(it_works);
Las solicitudes son asíncrono (no bloqueante) por defecto lo que significa que el navegador no esperar a que se completarán con el fin de continuar su labor. Es por eso que su alerta obtuvo un resultado incorrecto.
Ahora, con jQuery.ajax
puede configurar opcionalmente la solicitud para ser sincrónica, lo que significa que el script sólo continuará funcionando después de la solicitud está terminado.
La forma RECOMENDADO, sin embargo, es refactor su código para que los datos se pasan a una función de devolución de llamada tan pronto como la petición está terminado. Esto se prefiere porque bloquear la ejecución significa bloquear la UI que es inaceptable. Hacerlo de esta manera:
$.post("some_file.php", '', function(data) {
iDependOnMyParameter(data);
});
function iDependOnMyParameter(param) {
// You should do your work here that depends on the result of the request!
alert(param)
}
// All code here should be INDEPENDENT of the result of your AJAX request
// ...
asíncrono programación es un poco más complicada porque la consecuencia de hacer una solicitud se encapsula en una función en lugar de seguir el estado de la solicitud. Pero el comportamiento en tiempo real que las experiencias de los usuarios pueden ser significativamente mejor porque no van a ver a un servidor de red lento o débil que el navegador a actuar como si se hubiera estrellado. La programación sincrónica es irrespetuosa y no debe emplearse en aplicaciones que son utilizadas por personas.
Douglas Crockford(YUI Blog)
Ver http://stackoverflow.com/questions/133310/how-can-i-get-jquery-to-perform-a-synchronous-rather-than-asynchronous-ajax-req –