2013-06-28 5 views
1

Quelqu'un a-t-il de l'expérience avec ajax dans drupal 7? Je suis un peu coincé.drupal 7 ajax_deliver ne fonctionne pas

Alors, avec mon module, je sortie un lien et mapper le chemin d'une fonction de rappel avec hook_menu()

Dans la fonction de rappel I utilisé pour mettre à jour le contenu ajax_command_replace() et ajax_deliver().

Eh bien, jusqu'ici, tout va bien. Tout fonctionne. Mais s'avère, pour des raisons compliquées, que l'utilisation de liens ne fonctionnera pas. Donc, à la place, j'ai décidé d'essayer la façon ajax de jQuery. Donc, je joins un événement click à un div alors quand il est cliqué quelque chose comme cela fonctionne dans un fichier JavaScript que je charge:

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

Ensuite, dans mon module, j'utiliser le menu crochet pour mapper le chemin à un rappel fonction qui ressemble à ceci:

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); 

    } 

Ceci est exactement le même code qui a été contenu à remplacer quand j'avais sucessfully les liens. Mais pour une raison quelconque, cela ne fonctionne pas lorsque j'essaie d'appeler l'appel ajax avec jQuery. La fonction de rappel est appelée, le contenu correct est chargé dans $ output, mais la mise à jour n'est pas effectuée.

Est-ce que quelqu'un sait ce qui se passe ici?

Répondre

0

Une parenthèse fermante vous manque?

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

devrait être:

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

Oh, si seulement il était quelque chose de facile. –

0

probablement il y a un code javascript dans la sortie $ renvoyée par thème ('nœud', node_view de $), que vous devez enlever (supprimer). est ici un code de ma fonction ajax retour le nœud contenu rendu:

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