Pregunta

X publicación de http://drupal.org/node/953016

El sistema Drupal 7 Ajax es excelente, funciona muy bien para formularios e incluso para enlaces.

Lo que no puedo resolver cómo hacer de manera sensata es llamarlo desde JavaScript. Es posible que desee tener una página dinámica sin un formulario y, como parte de eso, hacer una llamada Ajax Drupal, específicamente para que los comandos AJAX se ejecuten al regreso.

La forma más efectiva que he encontrado para hacer esto hasta ahora es:

  dummy_link = $('<a href="'+uri+'" class="use-ajax">Loading Vars</a>');
  $(vars_div).append(dummy_link);
  Drupal.attachBehaviors(vars_div);
  dummy_link.click();

Lo cual es efectivo pero un gran truco. No he encontrado una manera de realizar una llamada AJAX y hacer que el marco Drupal Ajax lo haga, en lugar del marco jQuery estándar.

Hubiera pensado que era posible invocar la API Drupal Ajax directamente, ¿alguien sabe cómo?

¿Fue útil?

Solución

La breve respuesta corta es que querrás llegar a algo como:

$.ajax(ajax.options);

Cuál es la parte jQuery, pero con un conjunto de opciones que lo ayudan a conectar la bondad de Drupal en términos de manejo de éxito, efectos, etc. Esto es lo que es efectivamente lo que está sucediendo para usted en su "enorme truco".

Crear una nueva función Drupal.AJAX Programáticamente aún requiere un elemento sintético:

base = 'someid'
element = $('<a href="'+uri+'" class="use-ajax">Loading Vars</a>');
element_settings = {'url': uri, 'event': 'click'}
myAjax = new Drupal.ajax(base, element, element_settings)

Pero al menos puede activarlo sin simular un clic en la interfaz de usuario:

myAjax.eventResponse(element, 'click')

Parece que debería haber una mejor manera de hacer esto, pero requiere otra forma de configurar el prototipo AJAX inicial que no requiere un elemento DOM. Debido a que gran parte del conjunto de interacción depende de cómo mover los datos al DOM, no creo que este caso de uso esté bien respaldado todavía.

También puede ser posible ir directamente a jQuery con un conjunto adecuado de opciones y obtener el efecto que desea, pero las funciones de Drupal.AJAX ProToype se autoinforman bastante, así que hacerlo sin una clase Drupal.AJAX parece dicey.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top