web-dev-qa-db-ja.com

AJAXコールバックでフォームを再構築します

少しAJAXを追加した単純なフォームがあります。フォームは、ユーザーをリストに追加するだけです。つまり、ユーザーが電子メールアドレスを入力できるテキストフィールドがあり、その電子メールアドレスがリストに追加されます。

これで、[追加]ボタンがAJAXで有効になりました。つまり、追加リクエストはAJAXリクエストとして投稿されます。ただし、AJAXコールバック関数でフォームを再度レンダリングして、新しく追加されたユーザーがリストに表示されるようにしたいと考えています。しかし、どうすればよいかわかりません。

AJAXコールバック関数でdrupal_get_form()を使用してフォームを(「最初から」)構築し、そのフォームを返そうとしましたが、機能しません。それは私にエラーを与えるだけです:

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

AJAXリクエストの一部としてフォームを最初から再構築し、そのフォームを返したい場合はどうすればよいですか?

3
sbrattla

AJAXコールバックでは、$form_state['rebuild'] = TRUE;drupal_rebuild_form )。

$ form_state ['rebuild']はマルチステップフォームで非常に便利ですが、Ajaxコールバックでも便利です。

Examples プロジェクトもチェックすることをお勧めします。フォームの例とAJAXの例。

コードの関連スニペットを追加する場合は、詳細を追加してみます。

1
Citricguy

古い方法でしようとしているようです。

D7では、フォーム構築コードは最初のフォーム表示と後続のajax呼び出しで実行されます。そこで、$form_stateパラメータを使用して、新しく入力したデータに従ってフォームをレンダリングできます。

Ajax化された要素に '#callback'属性を付加します。ほとんどの例は、コールバックで1つの特定の要素を返すことを示しています。しかし、これは便利な特別なケースです。強力なAjaxコマンドAPIがあり、クライアントからサーバーへの幅広い操作の実行を要求するために使用できます。

フォームなどを手動で再構築する必要はありません。例を見てください: 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