少し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リクエストの一部としてフォームを最初から再構築し、そのフォームを返したい場合はどうすればよいですか?
AJAXコールバックでは、$form_state['rebuild'] = TRUE;
( drupal_rebuild_form )。
$ form_state ['rebuild']はマルチステップフォームで非常に便利ですが、Ajaxコールバックでも便利です。
Examples プロジェクトもチェックすることをお勧めします。フォームの例とAJAXの例。
コードの関連スニペットを追加する場合は、詳細を追加してみます。
古い方法でしようとしているようです。
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