web-dev-qa-db-fra.com

Reconstruire le formulaire en AJAX

J'ai un formulaire simple auquel j'ai ajouté un peu AJAX. Le formulaire permet simplement aux gens d'ajouter des utilisateurs à une liste. Autrement dit, j'ai un champ de texte où les gens peuvent entrer une adresse e-mail, et cette adresse e-mail est ajoutée à la liste.

Maintenant, le bouton "Ajouter" est activé AJAX, ce qui signifie que la demande d'ajout est publiée en tant que demande AJAX. Cependant, j'aimerais alors que la fonction de rappel AJAX rende le formulaire à nouveau afin que l'utilisateur nouvellement ajouté apparaisse dans la liste. Cependant, je ne vois pas vraiment comment je dois faire ça.

J'ai essayé de construire le formulaire ("à partir de zéro") en utilisant drupal_get_form () dans la fonction de rappel AJAX puis de renvoyer ce formulaire, mais cela ne fonctionne pas. Cela me donne juste l'erreur:

Notice: Undefined index: form_build_id in /home/playground/www/public_html/includes/ajax.inc on line 320

Comment dois-je procéder lorsque je souhaite reconstruire le formulaire à partir de zéro dans le cadre de la demande AJAX, puis retourner ce formulaire?

3
sbrattla

Dans votre AJAX, utilisez $form_state['rebuild'] = TRUE; ( drupal_rebuild_form ).

$ form_state ['rebuild'] est très utile dans les formulaires à plusieurs étapes, mais il peut également être utile dans les rappels Ajax.

Je recommande également de vérifier le projet Exemples . Les exemples de formulaire et les exemples AJAX.

Si vous ajoutez les extraits pertinents de votre code, j'essaierai d'ajouter plus de détails.

1
Citricguy

On dirait que vous essayez de le faire à l'ancienne.

Dans D7, votre code de création de formulaire s'exécute lors de l'affichage initial du formulaire et lors des appels ajax ultérieurs. Vous pouvez utiliser $form_state paramètre pour rendre le formulaire en fonction des données fraîchement entrées.

Vous attachez un attribut '#callback' aux éléments ajaxifiés. La plupart des exemples montrent le retour d'un élément particulier dans un rappel. Mais c'est juste un cas spécial pratique. Il existe une puissante API Ajax Commands, elle peut être utilisée pour demander l'exécution d'un large éventail d'opérations sur un client à partir d'un serveur.

Pas besoin de reconstruire manuellement des formulaires ou quelque chose comme ça. Regardez les exemples: http://d7.drupalexamples.info/examples/ajax_example/advanced_commands

http://api.drupal.org/api/drupal/includes!ajax.inc/group/ajax_commands/7

1
Dmitry Vyal