0

我正在使用 Drupal 6,我有一个非常简单的表单,只有三个我在自定义模块中创建的字段。我还将表单作为一个块放置在左侧导航中。这是一个搜索表格。它有两个选择框和一个自由格式文本字段。目标是能够从字段中获取值并使用 jQuery 进行 AJAX 调用,执行搜索并将 JSON 与结果一起返回到前端,并让 jQuery 循环并显示结果。不过,我在遵循 Drupal 工作流程时确实遇到了困难,尤其是因为表单位于一个块中。那么如何在我的 hook_form_submit 中正确处理 jQuery 调用呢?理想情况下,我希望他们在任何页面上,如果他们填写左侧边栏中的表格并提交,他们将被移植到处理 jQuery 的“结果”页面,但我只是可以' t 弄清楚如何/何时/在何处添加 JavaScript/jQuery 以正确处理此问题的正确流程。如果我在我的 hook_form_submit 中并尝试处理表单,我如何将结果显示到主要内容区域的结果页面?

谢谢

4

1 回答 1

0

我觉得你在这里有相互矛盾的要求。您想使用 ajax 加载表单的结果,但还想将用户重定向到结果页面。

如果您要将用户重定向到另一个页面,只需在视图中创建搜索表单,然后在表单提交中执行 drupal_goto('search-page')。由于您不需要进行页面加载ajax。

如果您想在不进行页面加载的情况下加载结果,这就是 ajax 派上用场的地方。然后,我将使用 ajax 处理程序完全跳过 drupal。不要添加按钮类型,只提交一个没有处理程序的按钮。然后在 ajax 文件中将行为附加到按钮按下。

ajax 应该为此 ajax 回调调用一些唯一的 url,例如“ajax/search-form”。在您的 hook_menu 中注册此网址,例如

$items['ajax/search-form/%/%/%'] = array(
  'title' => 'my title'
  'page callback' => 'my_module_ajax_search'
  'page arguments' => array(2,3,4),
);
return $items;

然后在你的函数中:

function my_module_ajax_search($first_param, $second, $third) {
  // Generate output and return it to the calling ajax function through print.
  $output = '<div>my output</div>'
  print $output;

  // Make sure Drupal closes out then bails so it doesn't output another
  // page wrapper.
  module_invoke_all('exit'); // Called automatically in Drupal 7 but not 6.
  exit(); 
}

你的 Ajax 看起来像:

$('.button').click(function(
  value1 = $('.box1').value() // dont remember the actual function to extract a text field value.
  value2 = ...
  $.ajax({
    url: Drupal.settings.basePath + 'ajax/search-form/' + value1 + '/' + value2 + '/' + value3,
    success: function(data) {
      $('.my content').html(data);
    }
  });
)
于 2012-08-07T21:06:07.700 回答