有人在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中,但是页面未更新。
有人知道这里发生了什么吗?
您是否缺少右括号?
$c = ajax_command_replace('#content','<div id = "content">' .$output. '</div>';
应该是:
$c = ajax_command_replace('#content','<div id = "content">' .$output. '</div>');
可能在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);
您能否解决此问题,本杰明?