2013-06-28 62 views
1

有沒有人有與drupal 7中的ajax經驗? 我有點卡住了。drupal 7 ajax_deliver不工作

所以,我的模塊,I輸出一個鏈接,地圖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

您是否錯過了右括號?

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

應該是:

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

哦,如果這是一件那麼容易。 –

0

有可能是通過主題( '節點',$ node_view)返回$輸出,你需要帶(刪除)裏面的一些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);