【问题标题】:Drupal 8 module - How to use AJAX?Drupal 8 模块 - 如何使用 AJAX?
【发布时间】:2017-05-22 18:50:31
【问题描述】:

我目前正尝试在我的 Drupal 8 模块中使用 AJAX(带有 jQ​​uery),以便在用户在文本字段中键入内容时重新加载页面。 我设法取回了一个完整的 HTML 页面,但我希望 AJAX 函数只获取页面的内容(没有整个布局)。

我怎样才能做到这一点?当请求使用 AJAX 时,为了呈现不同的视图,我应该在控制器功能中进行哪些更改?

我在 Google 和 Drupal 8 文档上进行了搜索,但没有找到任何问题的答案。

提前感谢您的帮助!

【问题讨论】:

  • 您使用的是Drupal Ajax API吗?这是否在您从自定义模块输出的表单中? Google has a massive amount of results
  • 发布生成文本字段/表单的代码。
  • 我的表单在 twig 模板中,不是使用 Form API 生成的。此外,我还想在我的模块中添加导航功能,让用户无需加载整个页面即可转到上一页/下一页。
  • 您刚刚将文本字段放入模板中?是自定义模块吗?下一页和上一页是什么?你在展示什么?为什么不使用视图?
  • 是的,我将文本字段放入模板中。这是一个提供共享日历的自定义模块。所以我希望用户能够去上/下个月或一周。我是 Drupal 的新手,所以我不知道 Views,它对我目前的情况有帮助吗?

标签: jquery ajax drupal drupal-8


【解决方案1】:

您可以在 AJAX 回调函数中返回数据,如下所示。

$build[] = array(
    '#type' => 'markup',
    '#markup' => '<p>Demo text content</p>',
);
return new Response(render($build));

确保包含响应类

use \Symfony\Component\HttpFoundation\Response;

【讨论】:

    【解决方案2】:

    您可以制作一些由某些 ajaxAction 请求返回的视图,您将通过这种方式在页面上附加或重新定义:

    $.ajax({
      type:  'GET',
      url:   'ajaxContent.php?action=get&pageId=777',
      cache: false
    }).done(function( receivedHtml ) {
      $("#targetBlock").html(receivedHtml);
    });
    

    这是在 ajaxContent 控制器上使用 jQuery ajax 并通过 url 传递参数的示例。

    【讨论】:

    • 您的回答只是通用的 jquery ajax,而不是在 Drupal 中的正确方法。
    • 不清楚您的问题是什么。你试过这个:drupal.stackexchange.com/questions/144947/… 有很多链接显示如何获取渲染页面的节点内容。
    • 我的问题与 jQuery 无关,而是与 Drupal 8 有关。我想找到一种方法,当我调用控制器函数时,返回页面(即我的模板的内容)而不是网站的静态部分(菜单、标题、侧边栏……)。
    猜你喜欢
    • 2017-04-14
    • 2016-09-10
    • 2016-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-02
    • 1970-01-01
    相关资源
    最近更新 更多