1

非 FAPI ajax メソッドを使用して選択リストを置き換えるときに、「不正な選択が検出されました」というエラーを解決する方法を見つけようとしています。

ノード作成フォームの例 では、選択リストの下にリンクがあり、ctools モーダル ウィンドウでカスタム フォームを開いて新しい値を追加します。モーダルでフォームの送信が成功すると、ノード フォームの選択が新しい値に置き換えられます。

  <?php
  if (!empty($form_state['executed'])) {
    // Replace node form select if form submit was successful.
    module_load_include('inc', 'node', 'node.pages');
    $node_form = node_add('photo');
    $new_field = drupal_render($node_form[$field]);
    $output = array();
    $output[] = ajax_command_replace($selector, $new_field);
    $output[] = ctools_modal_command_dismiss();
  }
  print ajax_render($output);

おそらくノードフォームがキャッシュされたフォーム値を使用して検証しているため、元のノードフォームを送信すると、「不正な選択」エラーが発生します。$form_state['rebuild'] = TRUE; を設定します。不正な選択エラーを修正しますが、ノード フォームのイメージ フィールドが正しく機能しません。画像ファイルはノードにアップロードされて保存されますが、サムネイル、alt、およびタイトルのタグは ajax されません)。Dblog は古いフォーム ID (再構築前) にデータを投稿しようとするため、このエラーを受け取ります。

location: file/ajax/field_image/und/0/form-DSbMdFlKNDaAJSFY4fVIHkcg2eMCDqYZHUfitCnR0VA
message: Invalid form POST data.

「不正な選択」エラーを回避するために選択リストを置き換えるより良い方法はありますか、または $form_state['rebuild'] でファイル モジュールのバグがあるかどうかを確認する必要がありますか? 可能な代替手段として、別のフォームから $form #ajax イベントをトリガーする方法に関するドキュメントが見つかりませんでした。それが可能かどうかはまったくわかりません。任意のガイダンスをいただければ幸いです。

4

1 に答える 1