Sto provando a convalidare un modulo utilizzando una chiamata AJAX per verificare l'inventario disponibile.Se il controllo dell'inventario ha un errore, restituisce un messaggio, altrimenti il modulo deve essere inviato.
Ho il codice seguente:
$("form[id*="distributor_"]").submit(function(){
return checkAvailableInventory($(this));
});
function checkAvailableInventory(form) {
$.ajax({
url: "/ajax/quantity.php?" + form.serialize(),
success: function(msg) {
if (msg) {
alert(msg);
return false;
} else {
return true;
}
}
});
}
Ho il sospetto che questo problema si verifichi a causa della natura asincrona di AJAX e che la clausola di successo: la clausola non scatta molto prima del completamento del ciclo di vita checkAvailableInventory ().
Qualcuno ha suggerimenti per risolvere questo problema? Ho visto alcuni esempi di persone che usano i timeout ma sembra una soluzione alternativa con possibili problemi.
risposte:
2 per risposta № 1Un'opzione è di rendere la chiamata non asincrona. È possibile impostare il async
proprety to false. È vero per impostazione predefinita. Non sei sicuro della durata della chiamata, poiché potrebbe bloccare il browser fino al completamento.
MODIFICARE: Un'altra opzione è quella di restituire false dal metodo che effettua la chiamata ajax. Quindi, nel metodo di successo quando raggiunge lì, è possibile separare la funzionalità di invio dal modulo e quindi chiamare semplicemente form.submit e verrà semplicemente postata ovunque dovrebbe normalmente senza la convalida.
0 per risposta № 2
potresti voler controllare il plugin jQuery validate! è abbastanza semplice da usare e gestisce molto bene la validazione remota.
il plugin: http://bassistance.de/jquery-plugins/jquery-plugin-validation/ i documenti sulla convalida remota: http://docs.jquery.com/Plugins/Validation/Methods/remote#options