$('#post_form').submit(function() { $("#ajax_bar_loader").show(); $.ajax({ url: 'add.html', data: $('#post_form').serialize(), dataType: 'json', type: 'post', success: function( result ) { retVal = formCheck( result ); } }); return false; }); That's what my code looks like and instead of the "return false", I want to allow it if the data contained in "result" says to. How can I accomplish this?
4 Réponses :
success: function(result) { ... document.forms.post_form.submit(); }
Vous pouvez le faire comme ceci:
$.ajax({ url: 'add.html', data: $('#post_form').serialize(), dataType: 'json', type: 'post', success: function( result ) { retVal = formCheck( result ); if(retVal) $('#post_form').unbind('submit').submit(); else alert('Error with your form! Oh crap!'); } });
À JQuery, avez-vous besoin d'un imbidation en premier? Il soumettra de l'une ou l'autre des gaspilles de la forme revérifier la forme correcte?
@Jeff - Comme cela se produit dans le gestionnaire de soumission, ce code se déroulerait à nouveau si vous ne l'avez pas fait.
@Nick merci mais cela soumettrait toujours le même s'il exécute le retour faux; correct?
@Jeff Beck - le renvoie false; code> annulera cet appel de soumission, celui invoqué par un véritable retour sur l'appel Ajax n'exécutera pas le code contenant le renvoi Faux.
Le problème ici est, $ .AJAX va courir de manière asynchrone, il est donc tout à fait possible que nous n'engaudions pas le gestionnaire de soumission avant que l'attribut action code> du formulaire a été suivi.
@ Karim79 - Il tire la demande, JavaScript étant un seul fileté unique devrait garantir que cette méthode se termine avant que le gestionnaire de succès soit autorisé à exécuter.
Lecture de la page JQuery sur l'appel .Submit () Cela semblerait que cela réexécutera les événements liés à la soumission, mais il sera toujours soumis quelles que soient les valeurs qu'ils revenaient. Je n'ai pas encore essayé de confirmer cela.
@Jeff - Cet appel .unbind ('Soumettre') code> supprime la liaison jQuery, de sorte que cela ne sera plus exécuté.
Je suggérerais de toujours retourner false code> à la fin du gestionnaire d'événements afin d'éviter toute soumission de formulaire normale. Dans le Success Rappel sur
$. Ajax CODE>, vous pouvez rediriger de manière conditionnelle en fonction de la réponse du serveur:
$('#post_form').submit(function() {
$("#ajax_bar_loader").show();
$.ajax({
url: 'add.html',
data: $('#post_form').serialize(),
dataType: 'json',
type: 'post',
success: function( result ) {
if(result == 'something') {
alert("some error happened");
} else {
// assuming we're visiting the form's action
window.location.href = $(this).attr("action");
}
}
});
return false;
});
Mais cela ne soumettrait aucune des données de formulaire à l'action du formulaire le ferait-il?
Je ne sais pas si cela fonctionnera pour votre problème, mais que si vous avez fait la demande Ajax synchrone?
J'ai ce code factice sur "Travailler", il incendie la demande Ajax, puis définit un booléen. Ensuite, le formulaire renvoie true ou false basée sur le booléen: p>