drupal 7 ajax_deliver不工作

时间:2013-06-28 22:06:45

标签: php jquery ajax drupal drupal-7

有没有人在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中加载正确的东西,但页面没有更新。

有谁知道这里发生了什么?

2 个答案:

答案 0 :(得分:0)

你错过了一个右括号吗?

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

应该是:

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

答案 1 :(得分:0)

可能主题('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);