Php 来自ahah的Drupal 7 ajax

Php 来自ahah的Drupal 7 ajax,php,jquery,ajax,drupal-7,Php,Jquery,Ajax,Drupal 7,我有以下表格: function tax_assistant_form_alter(&$form, $form_state, $form_id) { //questa funzione è usata per alterare la disposizione del form originale //contenuto in un altro modulo (linkableobject) if ($form_id == 'linkableobject_node_

我有以下表格:

function tax_assistant_form_alter(&$form, $form_state, $form_id) {
    //questa funzione è usata per alterare la disposizione del form originale
    //contenuto in un altro modulo (linkableobject)
    if ($form_id == 'linkableobject_node_form') {
    $vid=26;
            $query=taxonomy_get_tree($vid);
        //Creo funzione per array name vocabulary
        foreach($query as $rec){
        $form["prova"]= array(
        '#type'=> 'select',
        '#title'=> t($rec->name),
        '#options'=>array(get_vid($vid)),
        '#ajax' => array(
                    'callback'=>'get_synonyms',
                'wrapper'=>'area_sinonimi',
                'replace'=>'TRUE',
                    ),
        );
    }
        //form dei sinonimi        
        $form['sinonimi'] = array(
          // '#type' => 'hidden',
        '#title'=> t('Sinonimi'),
            '#prefix' => '<div id="area_sinonimi">Qui andrebbero i sinonimi',
            '#suffix' => '</div>',
        );
 }
回想一下ajax这个函数的同义词get_

function get_synonyms() {
    $form_build_id = $_POST['form_build_id'];
    $form_state = array('submitted' => FALSE);
    $form = form_get_cache($form_build_id, $form_state);
    $output="";
    $synonyms = '';
    $vid=26;
        $tid = $_POST['prova'];
        $result = db_query('SELECT name FROM {taxonomy_term_synonym} where tid=:tid', array(':tid'=>$tid));
    //print_r($result);
        $voc = get_vocabolario($vid);
        if ($tid > 0)
            $synonyms .= "<b>Synonyms for $voc:</b></br>";
        foreach ($result as $rec) {
            $synonyms.= "<i>'" . $rec->name . "';</i> ";
            $keywords[$rec->name] = $rec->name;
        }

        $form['sinonimi'] = array(
            '#type' => 'item',
            '#description' => t("In order to facilitate the cataloging of your learning object,
      try to make use of these terms for its description"),
            '#value' => $synonyms,
        );
        $synonyms.='</br>';


    form_set_cache($_POST['form_id'], $form, $form_state);

    $form = form_builder($_POST['form_id'], $form, $form_state);

    $output.=drupal_render($form['sinonimi']);


    drupal_json_encode(array('status' => TRUE, 'data' => $output));

    exit;
}
但是告诉我这个错误是可恢复的致命错误:传递给drupal_array_set_nested_值的参数1必须是array类型,null给定,在第2532行的/var/www/html/glorep/includes/form.inc中调用,并在/var/www/html/glorep/includes/common.inc的drupal_array_set_nested_值第6598行中定义。 我认为问题在于ajax,当有D6时,我已经从D6升级了它,但我能理解如何修改,有人能帮我吗

请阅读并更新您的代码。 您正在循环中添加具有相同名称的表单元素$form[prova]。因此,每次迭代都将用新元素替换现有元素。 检查$tid=$_POST['prova']的值;因为这取决于为此选择框设置的选项。我想你没有设定选项的关键。 检查drupal_数组_集合_嵌套_值函数的参数。 安装并配置xdebug,将能够在1分钟内找到bug。
谢谢你的帮助好的,现在我读到了!varibale$tid已经满了,我在上面贴上了drupal\u set\u消息,$form['sinonimi']也满了!这个表单基于另一个表单,我认为问题在于第二个表单,因为drupal\u Set\u netsted\u值是对drupal\u validate\u表单的调用@Dewitt,只是一个建议:您可以使用var_dump$var;阻尼任何变量;,看门狗“转储”,打印$var,1;或dpm$var(如果已安装devel模块)。但更好的方法是使用xdebug在运行时检查精确的值。谢谢,我尝试了,结果是一样的,问题是表单!