Una leggera variazione di questa domanda è: Voglio usare jquery e ajax per presentare un messaggio di errore a un utente, , ma poi fare un'elaborazione normale se non ci sono errori.
Supponiamo che il metodo "check" restituisca una risposta che è vuota se non vi è errore e contiene gli errori in esso presenti.
Poi si può fare qualcosa di simile nella funzione pronta:
$("#theform").submit(function() {
var data = { ... }
$.get('/check', data,
function(resp) {
if (resp.length > 0) {
$("#error").html(resp);
} else {
$("#theform").unbind('submit');
$("#theform").submit();
}
});
event.preventDefault();
});
Allora, come funziona?Quando viene attivata la funzione di invio esterno, crea i dati necessari per la chiamata AJAX (qui la funzione di livello superiore ottiene). La chiamata è pianificata e il thread principale di operazione continua immediatamente, ma l'invio viene arrestato incondizionatamente, quindi non accade nulla di evidente.
Alcuni passaggi di tempo e la chiamata AJAX restituisce il risultato della richiesta. Se non vuoto, il risultato viene mostrato all'utente.
Se la risposta è vuota, tuttavia, la funzione di invio non è associata. Ciò impedisce al ssytem di effettuare una chiamata extra attraverso la funzione di invio esterno. Viene chiamata la funzione di invio interno. Questo innesca una vera e propria sottomissione della forma al bersaglio della forma, e la vita continua come previsto.
fonte
2010-08-27 17:03:16
Parte del problema, ma principalmente il problema è che la funzione ajax è asincrona e quindi non può restituire un valore perché l'esecuzione del codice non attende il completamento di questa funzione. – Sylverdrag