J’ai un script qui saisit le champ de texte d’entrée à partir d’un conteneur div appelé le panneau de protection. Je fais un appel post ajax pour que ce champ de texte soit vérifié dans le backend. Si une personne entre le bon mot de passe, nous allons afficher un autre panneau de conteneur div.
$("#protectivepanel").submit(function(event) { $.ajax({ type: "POST", url: "/users/sortingal_signup_validation", data: $("#protectivepanel").serialize(), success: function(data){ console.log('data request succeeded'); return data } }); event.preventDefault() }); $(document).ready(function(){ $("#the_submit_button").click(function(event){ event.preventDefault(); console.log('event.preventDefault'); if (data.success){ console.log('data'); $("#protectivepanel").hide() $("#salespanel > div").removeClass("hide") } else { $("#protectivepanel").show() } }); });
voici la méthode qui vérifie avec
def sortingal_signup_validation @password = params['password'] if @password == 'sales' render :json => { "success" => "true" } else render :json => { "success" => "false" } end end
Maintenant, je veux qu’il renvoie les données JSON et si c’est un succès, nous dévoilons le panneau dans le script.
ma console chrome a ceci lorsque je saisis “ventes” dans ma zone de texte et que je clique sur Envoyer
Uncaught ReferenceError: data is not defined
Voici ma forme si nécessaire
Je ne comprends pas si je fais le rappel correctement. Le journal de mon serveur ne montre pas le post-appel ajax. Comment savoir si les données renvoyées sont correctes?
Le e.preventDefault
de l’ #the_submit_button
de clic de #the_submit_button
empêche la soumission du formulaire qui effectue l’appel ajax. Puisque l’événement submit
est lié en dehors de document.ready
, il est possible que rien ne soit lié non plus.
Enfin, vous ne pouvez pas revenir du rappel ajax. Tout ce qui dépend du résultat du rappel doit être effectué dans le cadre du rappel. Corrigez ces trois choses:
preventDefault
pour l’événement de clic du bouton d’ preventDefault
#protectivepanel
existe lorsque vous vous y #protectivepanel
. hide
/ removeClass
dans votre fonction de rappel de success
. Vous pouvez également vouloir fournir un rappel d’ error
.