web-dev-qa-db-fra.com

Quelle est la méthode / implémentation la plus rapide pour un rappel Ajax?

J'ai une carte qui charge des marqueurs via ajax sur divers/nombreux événements de carte. Actuellement, je définis un rappel de page personnalisé pour mon élément hook_menu() qui imprime mon json/js.

Étant donné que le rappel de ma page ne renvoie aucun contenu et imprime uniquement le contenu , Drupal ne rend pas le modèle complet, le menu, etc., et me permet donc de renvoyer une page avec seulement mon JavaScript.

Bien que cela fonctionne, je pense que Drupal est toujours complètement bootstrap, ce qui signifie qu'il ajoute beaucoup de frais généraux que je voudrais supprimer.

J'ai regardé gestionnaire de rappel JavaScript haute performance , qui se présente comme un "gestionnaire de rappel JavaScript haute performance" et qui, en bref, semble offrir un js.php complimenter index.php pour diriger vos requêtes et personnaliser/limiter/optimiser le bootstrapping Drupal le fait par défaut.

Malheureusement, le projet js n'a pas encore de version D7 ( pétition pour une ici ), ce qui nous amène au début ... =

Quel est le moyen le plus rapide pour implémenter un rappel Ajax dans Drupal?

17
electblake

Je définis un rappel de page personnalisé pour mon élément hook_menu() qui imprime mon json/js.

C'est ce que Drupal 6 offert. Le Drupal 7 AJAX framework peut faire un peu plus que cela. Oui, il démarre Drupal, mais il offre également de nombreuses fonctionnalités gratuitement. En bref, vous pouvez utiliser ajax_deliver () comme méthode de livraison de page et envoyer des commandes au navigateur.

... Ajax peut être activé en ajoutant des classes aux boutons et aux liens. En ajoutant la classe 'use-ajax' à un lien, le lien sera chargé via un appel Ajax. Lorsque vous utilisez cette méthode, le href du lien peut contenir "/ nojs /" dans le cadre du chemin. Lorsque le framework Ajax fait la demande, il le convertit en '/ ajax /'. Le serveur est alors en mesure de déterminer facilement si cette demande a été effectuée via une demande Ajax réelle ou dans un état dégradé, et de répondre de manière appropriée.

Cependant, si vous souhaitez contourner le framework pour des raisons de performances, rien ne vous empêche d'appeler des fichiers php dans votre module directement à partir de javascript. Vous n'obtiendrez aucun Drupal bonté mais vous aurez également un contrôle complet sur la page.

8
Jeremy French

Un peu tard, mais surtout si vous utilisez ce rappel ajax pour l'interrogation (vérifiez les nouveaux messages par exemple), il existe une alternative intéressante: intégration Drupal node.js .

Au lieu d'interroger, il vous permet de créer un système de type événementiel, où les utilisateurs (alias le JS sur leur page) gardent une connexion ouverte à votre serveur node.js. Si quelque chose se produit, vous pouvez informer directement tous les utilisateurs via node.js.

4
Berdir

Puisque vous souhaitez implémenter un rappel Ajax dans Drupal , l'utilisation du module JS ressemble à un bon pari. Je viens de jeter un coup d'œil au code, et c'est essentiellement ce que j'aurais suggéré (mais avec beaucoup plus d'attention aux détails). Le mainteneur est également l'un des meilleurs développeurs Drupal.

Il semble que vous devrez utiliser module_load_include() ou peut-être une version plus manuelle include 'sites/all/modules/contrib/...'; approche si vous devez utiliser des API d'autres modules.

Le problème dont vous parlez a été un sujet brûlant ces derniers temps. Keynote de Dries de DrupalCon Chicago a expliqué comment Drupal 8 a besoin de meilleures API pour effectuer des rappels et des formats de sortie non HTML.

3
Adam DiCarlo