2010-06-16 6 views
0

Y a-t-il une sorte d'astuce? Voici comment j'imaginer fonctionner:Impossible de faire en sorte que la validation du formulaire Prototype AJAX fonctionne conjointement avec Codeigniter

  1. utilisateur tente de soumettre le formulaire

  2. Event.observe capture cela et envoie une requête AJAX à une URL de validation spéciale (PHP en utilisant CodeIgniter)

  3. Si aucune erreur n'a été renvoyées, continuer à soumettre la forme originale

  4. Si des erreurs ont été trouvées, annuler formulaire de soumission et d'affichage

Généralement, je n'arrive pas à obtenir une requête de validation AJAX distincte pour que le formulaire continue à être envoyé. Je pourrais utiliser Event.stop(event), mais n'a pas trouvé un moyen de redémarrer le processus si aucune erreur de validation n'existe à partir de l'appel de validation. Je posterais du code, mais j'ai environ 15 exemples de choses que j'ai essayées et cela ne ferait qu'encombrer cette question.

Des idées? Je ne pensais pas que la validation de formulaire serait aussi difficile.

Répondre

1

Enfin compris! Voici mon code JS final. Alors que le formulaire lui-même est soumis à "/ search/result/keyword" comme action par défaut, la validation est une URL "/ search/validate/searchkeyword" entièrement différente.

<script type="text/javascript"> 
    Event.observe(window, 'load', function() 
    { 
     Event.observe('searchkeyword', 'submit', function(event) 
     { 
     Event.stop(event); 
     new Ajax.Request('/search/validate/searchkeyword', 
     { 
      method: 'post', 
      parameters: $('searchkeyword').serialize(true), 
      onSuccess: function(t) 
      { 
       var response = t.responseText || "ERROR|An error has occurred."; 
       var responsearray = response.split('|'); 
       if(responsearray[0] == 'ERROR') { document.getElementById('searchkeywordvalidate').innerHTML = responsearray[1]; } 
       else { $('searchkeyword').submit(); } 
      }, 
      onFailure: function() { document.getElementById('searchkeywordvalidate').innerHTML = 'An error has occurred.'; } 
     }); 
     }); 
    }); 
</script> 
0

Je suis un peu confus avec la description de votre processus. L'utilisateur soumet le formulaire. Votre javascript capture l'onlcick, puis envoie une requête ajax au serveur. c'est-à-dire qu'un objet de requête HTTP a été envoyé. Maintenant le serveur fait un peu de traitement (validation en utilisant Codeignitor). Vous dites que si aucune erreur n'est renvoyée, est-ce que cela signifie pour le client ou aucune erreur n'est renvoyée de la validation? Vous ne devriez pas retourner au client si aucune erreur de validation ne s'est produite. Vous continuez avec le traitement côté serveur à ce stade. Il n'est donc pas nécessaire de "renvoyer" le formulaire pour soumission. Le serveur a déjà tout ce dont il a besoin dans le tableau POST.

S'il y a des erreurs alors oui vous retourneriez un objet de réponse HTTP avec un type de HTML ou JSON, etc. que le javascript pourrait ensuite analyser et afficher à l'utilisateur. Ensuite, ils devraient recliquer le bouton de soumission en recommençant le processus.

+0

Par aucune erreur, je veux dire que la validation passe et que le formulaire peut continuer à soumettre normalement. Le problème que j'ai rencontré avec le traitement continu du serveur au moment de la validation est que j'ai un DIV rempli avec la réponse à la fin du client. Ainsi, tout traitement de serveur continu s'affiche également dans DIV. Je posterai du code pour cet exemple ce soir. – MattB

Questions connexes