有没有人在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中加载正确的东西,但页面没有更新。
有谁知道这里发生了什么?
答案 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);