Quello che ci si aspetta è la sincrono (blocco) tipo di richiesta.
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);
Le richieste sono asincrono (non bloccante) per impostazione predefinita il che significa che il browser non attendere per loro di essere completato al fine di continuare il suo lavoro. Ecco perché il tuo avviso ha ottenuto risultati errati.
Ora, con jQuery.ajax
è possibile opzionalmente impostare la richiesta di essere sincrona, il che significa che lo script solo continuerà a correre dopo la richiesta è terminata.
Il modo RACCOMANDATO, tuttavia, è quello di refactoring il codice in modo che i dati sarebbero stati passati a un callback funzione non appena la richiesta è terminata. Questo è preferito perché bloccare l'esecuzione significa bloccare l'interfaccia utente che è inaccettabile. Farlo in questo modo:
$.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
// ...
Asynchronous programmazione è leggermente più complicata perché la conseguenza di fare una richiesta viene incapsulato in una funzione invece di seguire la dichiarazione richiesta. Ma il comportamento in tempo reale che le esperienze degli utenti possono essere significativamente meglio perché non vedranno un server lento o di rete lenta causano il browser di agire come se fosse caduto. sincrono programmazione è irrispettoso e non dovrebbero essere impiegate in applicazioni che vengono utilizzati da persone.
Douglas Crockford(YUI Blog)
Vedi http://stackoverflow.com/questions/133310/how-can-i-get-jquery-to-perform-a-synchronous-rather-than-asynchronous-ajax-req –