Qual è il metodo / implementazione più veloce per un callback Ajax?


18

Ho una mappa che carica i marcatori tramite Ajax su vari / numerosi eventi della mappa. Attualmente, definisco un callback di pagina personalizzato per il mio hook_menu()articolo che stampa il mio json / js.

Poiché il callback della mia pagina non restituisce alcun contenuto e ne stampa solo il contenuto, Drupal non esegue il rendering del modello completo, del menu, ecc. E quindi mi consente di restituire una pagina con solo il mio JavaScript.

Anche se funziona, credo che Drupal esegua ancora il bootstrap completo, il che significa che sta aggiungendo un sacco di costi generali che vorrei eliminare.

Ho esaminato il gestore di callback JavaScript ad alte prestazioni , che si vanta come un "gestore di callback JavaScript ad alte prestazioni" e che, in breve, sembra che offra un js.phpcomplimento index.phpper indirizzare le tue richieste e personalizzare / limitare / ottimizza il bootstrap che Drupal esegue di default.

Sfortunatamente il progetto js non ha ancora una versione D7 ( petizione per uno qui ), che ci porta all'inizio ...

Qual è il modo più veloce per implementare un callback Ajax in Drupal?

Risposte:


8

Definisco un callback di pagina personalizzato per il mio hook_menu()articolo che stampa il mio json / js.

Questo è ciò che Drupal 6 ha offerto. Il framework Drupal 7 AJAX può fare un po 'di più. Sì, avvia Drupal, ma offre anche molte funzionalità gratuitamente. In breve, è possibile utilizzare ajax_deliver () come metodo di consegna della pagina e inviare comandi al browser.

... Ajax può essere abilitato aggiungendo classi a pulsanti e collegamenti. Aggiungendo la classe "use-ajax" a un collegamento, il collegamento verrà caricato tramite una chiamata Ajax. Quando si utilizza questo metodo, l'href del collegamento può contenere '/ nojs /' come parte del percorso. Quando il framework Ajax effettua la richiesta, la converte in '/ ajax /'. Il server è quindi in grado di dire facilmente se questa richiesta è stata fatta attraverso una richiesta Ajax effettiva o in uno stato degradato e rispondere in modo appropriato.

Tuttavia, se vuoi eludere il framework per motivi di prestazioni, non c'è nulla che ti impedisca di chiamare i file php nel tuo modulo direttamente da JavaScript. Non otterrai alcun bontà di Drupal ma avrai anche il controllo completo sulla pagina.


Grazie! Indipendentemente dalle prestazioni dovrei davvero utilizzare Ajax Framework (ora che ne sono a conoscenza) b / c eventuali miglioramenti al processo di richiesta della pagina ajax probabilmente avverranno in quel contesto :)
electblake

2
Dai un'occhiata ai moduli di esempio, ti aiuteranno molto, il framework è orientato verso le forme ma può essere usato ovunque. Ho modificato la mia risposta con un po 'della classe "use-ajax".
Jeremy francese

3
La chiamata diretta di file PHP va bene a volte. Puoi anche avere quel file che include bootstrap.inc e quindi chiamare api.drupal.org/api/drupal/includes--bootstrap.inc/function/… al livello specifico di cui hai bisogno.
Greggles,

4

Un po 'in ritardo, ma soprattutto se si utilizza tale callback Ajax per il polling (controllo per i nuovi messaggi, ad esempio), non v'è un'alternativa interessante: l'integrazione Drupal node.js .

Invece di eseguire il polling, ti consente di creare un sistema simile a un evento, in cui gli utenti (noto anche come JS sulla loro pagina) mantengono una connessione aperta al tuo server node.js. Se succede qualcosa, puoi avvisare direttamente tutti gli utenti tramite node.js.


Mai troppo tardi per grandi suggerimenti - non ho nemmeno pensato di usare node.js per questo genere di cose, ma all'improvviso ha senso eh, grazie!
electblake,

3

Poiché desideri implementare un callback Ajax in Drupal , l'utilizzo del modulo JS sembra una buona scommessa. Ho appena dato una rapida occhiata al codice, ed è sostanzialmente quello che avrei suggerito (ma con molta più attenzione ai dettagli). Il manutentore è anche uno dei migliori sviluppatori di Drupal.

Sembra che dovrai usare module_load_include()o forse un include 'sites/all/modules/contrib/...';approccio più manuale se devi usare le API di altri moduli.

Lo stesso problema di cui stai parlando è stato un argomento caldo ultimamente. Il keynote di Dries di DrupalCon Chicago ha parlato di come Drupal 8 abbia bisogno di API migliori per eseguire callback e formati di output non HTML.


Quindi, in breve: continuate a cercare JS.php & do / project / js? Inizierò a presentare una petizione nella domanda per la versione D7. Grazie per il video!
electblake,

Sì, è un vero peccato che il progetto JS non sia ancora stato portato su D7. È un peccato che sia così difficile ottenere una richiesta di pagina leggera.
Matt Collins,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.