drupal 7 ajax_deliver无法正常工作

问题描述 投票:1回答:2

有人在drupal 7中使用过ajax吗?我有点卡住。

因此,在我的模块中,我输出了一个链接,并使用hook_menu()将路径映射到回调函数

在回调函数中,我使用了ajax_command_replace()和ajax_deliver()来更新内容。

很好,到目前为止,很好。一切正常。但是事实证明,由于复杂的原因,使用链接是行不通的。

因此,我决定尝试使用jQuery ajax方法。因此,我将click事件附加到div上,以便当它被单击时,在我加载的JavaScript文件中运行如下所示的内容:

jQuery.ajax({
    type: 'POST',
    url: 'http://path/etc',
});

然后,在我的模块中,我使用挂钩菜单将路径映射到如下所示的回调函数:

function the_callback($var) {
    // a lot of code that gets the right nid to load. This all works...
    // and eventually I end up here:

    $node = node_load($nid, NULL, false);
    if ($node) {
        $node_view = node_view($node); 
        $output = theme("node",$node_view);

        $commands = array();
        $commands = ajax_command_replace('#content','<div id = "content">' . $output . '</div>';
        $page = array('#type' => 'ajax', '#commands' => $commands);
        ajax_deliver($page);

    }

这是与我拥有链接时成功替换内容的完全相同的代码。但是由于某种原因,当我尝试使用jQuery调用ajax调用时,这不起作用。将调用回调函数,将正确的内容加载到$ output中,但是页面未更新。

有人知道这里发生了什么吗?

php jquery ajax drupal drupal-7
2个回答
0
投票

您是否缺少右括号?

$c = ajax_command_replace('#content','<div id = "content">' .$output. '</div>';

应该是:

$c = ajax_command_replace('#content','<div id = "content">' .$output. '</div>');

0
投票

可能在theme('node',$ node_view)返回的$ output中有一些javascript代码,您需要剥离(删除)。这是我的ajax函数返回的节点渲染内容的一些代码:

  $n = node_load($nid, NULL, FALSE);
  $output =  drupal_render(node_view($n));
  $output = preg_replace('~<script\s+type="text/javascript">.+</script>~is', '', $output);

0
投票

您能否解决此问题,本杰明?

© www.soinside.com 2019 - 2024. All rights reserved.