【发布时间】:2012-02-15 08:37:26
【问题描述】:
试图弄清楚在使用非 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 和标题标签不会被 ajaxed 插入)。 Dblog 收到此错误是因为它尝试将数据发布到旧表单 ID(预重建)。
location: file/ajax/field_image/und/0/form-DSbMdFlKNDaAJSFY4fVIHkcg2eMCDqYZHUfitCnR0VA
message: Invalid form POST data.
是否有更好的方法来替换选择列表以避免“非法选择”错误,或者我应该检查 $form_state['rebuild'] 是否存在文件模块错误?作为一种可能的替代方法,我找不到任何关于如何从另一个表单触发 $form #ajax 事件的文档。不确定这是否可能。 任何指导将不胜感激。
【问题讨论】:
标签: ajax drupal-7 modal-dialog drupal-ctools