¿Cuál es el método / implementación más rápido para una devolución de llamada Ajax?

18

Tengo un mapa que carga marcadores a través de ajax en varios / numerosos eventos de mapas. Actualmente, defino una devolución de llamada de página personalizada para mi hook_menu()artículo que imprime mi json / js.

Dado que la devolución de llamada de mi página no devuelve ningún contenido y solo imprime contenido, Drupal no muestra la plantilla completa, el menú, etc. y, por lo tanto, me permite devolver una página solo con mi JavaScript.

Si bien esto funciona, creo que Drupal todavía tiene un arranque completo, lo que significa que está agregando una gran cantidad de gastos generales que me gustaría eliminar.

He estado buscando un controlador de devolución de llamada de JavaScript de alto rendimiento , que se enorgullece de ser un "controlador de devolución de llamada de JavaScript de alto rendimiento" y que, en resumen, parece un js.phpcomplemento index.phppara dirigir sus solicitudes y personalizar / limitar / optimizar el arranque Drupal lo hace por defecto.

Desafortunadamente, el proyecto js aún no tiene un lanzamiento D7 ( petición para uno aquí ), lo que nos lleva al principio ...

¿Cuál es la forma más rápida de implementar una devolución de llamada Ajax en Drupal?

electblake
fuente

Respuestas:

8

Defino una devolución de llamada de página personalizada para mi hook_menu()artículo que imprime mi json / js.

Eso es lo que ofrece Drupal 6. El marco Drupal 7 AJAX puede hacer un poco más que eso. Sí, inicia Drupal, pero también ofrece muchas funciones de forma gratuita. En resumen, puede usar ajax_deliver () como método de entrega de página y enviar comandos al navegador.

... Ajax puede habilitarse agregando clases a botones y enlaces. Al agregar la clase 'use-ajax' a un enlace, el enlace se cargará a través de una llamada Ajax. Cuando se utiliza este método, la href del enlace puede contener '/ nojs /' como parte de la ruta. Cuando el marco Ajax realiza la solicitud, la convertirá a '/ ajax /'. El servidor puede saber fácilmente si esta solicitud se realizó a través de una solicitud real de Ajax o en un estado degradado, y responder adecuadamente.

Sin embargo, si desea eludir el marco por razones de rendimiento, entonces no hay nada que le impida llamar a los archivos php en su módulo directamente desde javascript. No obtendrá la bondad de Drupal, pero también tendrá un control completo sobre la página.

Jeremy French
fuente
¡Gracias! Independientemente del rendimiento, realmente debería usar el Marco Ajax (ahora que lo sé) b / c cualquier mejora en el proceso de solicitud de la página ajax probablemente sucederá dentro de ese contexto :)
electblake
2
Eche un vistazo a los módulos de ejemplo, ayudarán mucho, el marco está orientado a los formularios, pero se puede usar en cualquier lugar. He editado mi respuesta con un poco sobre la clase 'use-ajax'.
Jeremy French
3
Llamar a archivos PHP directamente está bien a veces. Incluso puede hacer que ese archivo incluya bootstrap.inc y luego llame a api.drupal.org/api/drupal/includes--bootstrap.inc/function/… al nivel específico que lo necesite.
greggles
4

Un poco tarde, pero especialmente si está usando que de devolución de llamada Ajax para el sondeo (comprobación de nuevos mensajes, por ejemplo), hay una alternativa interesante: la integración de Drupal Node.js .

En lugar de sondear, le permite construir un sistema similar a un evento, donde los usuarios (también conocidos como JS en su página) mantienen una conexión abierta a su servidor node.js. Si sucede algo, puede notificar directamente a todos los usuarios a través de node.js.

Berdir
fuente
Nunca es tarde para grandes sugerencias, nunca pensé en usar node.js para este tipo de cosas, pero de repente tiene sentido je, ¡gracias!
electblake
3

Dado que desea implementar una devolución de llamada Ajax en Drupal , usar el módulo JS parece una buena apuesta. Acabo de echar un vistazo rápido al código, y es básicamente lo que hubiera sugerido (pero con mucha más atención a los detalles). El responsable también es uno de los principales desarrolladores de Drupal.

Parece que tendrá que usar module_load_include()o quizás un include 'sites/all/modules/contrib/...';enfoque más manual si necesita usar API de otros módulos.

El problema del que estás hablando ha sido un tema candente últimamente. La nota clave de Dries de DrupalCon Chicago habló sobre cómo Drupal 8 necesita mejores API para realizar devoluciones de llamada y formatos de salida que no sean HTML.

Adam DiCarlo
fuente
En resumen, ¿seguir investigando JS.php & do / project / js? Comenzaré a solicitar en el problema que para el lanzamiento de D7. ¡Gracias por el video!
electblake
Sí, es una verdadera lástima que el proyecto JS aún no haya sido portado a D7. Es una pena que sea tan difícil obtener una solicitud de página ligera.
Matt Collins