web-dev-qa-db-fra.com

AJAX appel renvoyant le site Web entier au lieu du tableau

Je passe un appel AJAX de mon modèle au contrôleur et au lieu de ne renvoyer que le résultat de la requête SQL, il renvoie un site Web entier (avec le contenu du résultat quelque part au milieu).

Code de fragment d'une fonction à l'intérieur de mon modèle>

echo '<li> <a onclick="nodeList('.$row->id.')">'.$row->title.'</a></li>';

JFactory::getDocument()->addScriptDeclaration("
    function nodeList(node_id){
        alert(node_id);

        jQuery.ajax({
            url: 'index.php?option=com_nautilus&task=update',
            type: 'POST',
            data: ({id: node_id}),
            success: function(data){
                console.log('success');
                console.log(data);
            },
                error: function(){
                console.log('error');
            }   
        });
    }
");

Code de ma fonction de mise à jour dans controller.php>

public function update()
{
    $id = $_POST['id'];

    $db = JFactory::getDbo();
    $query = $db->getQuery(true);
    $db->setQuery("SELECT c.title,c.id,c.type FROM #__content c INNER JOIN #__content_parents as p ON c.id=p.node_id and p.parent_id=$id");
    $result = $db->loadObjectList();
    echo (json_encode($result, JSON_FORCE_OBJECT));
}

Merci!

1
republicca

Vous devez spécifier le format de sortie. Sinon, Joomla assume le HTML.

Par exemple, en travaillant avec le framework FoF, vous définissez dans l'URL & format = json pour obtenir une vue rendue JSON.

FoF - Vues automatiques et services Web

1
Anibal

Si vous souhaitez toujours appeler votre fonction ajax placée dans le contrôleur, sans aucun format de sortie, placez un code pour quitter votre méthode de contrôleur avant le crochet final, afin que la vue ne soit pas appelée à l'aide de la commande exit (); code.

1
shine