/ / drupal 7 evita que funcione la llamada jquery ajax - jquery, ajax, drupal

drupal 7 evita que funcione la llamada jquery ajax - jquery, ajax, drupal

Tengo un código de jquery de libro de texto simple que realiza una llamada ajax y escribe el resultado en la página web. Funciona por sí solo, pero no cuando se incluye en una página en un sitio de drupal 7.

El código se está incluyendo a través de un módulo personalizado que escribe en la página usando hook_block_view_alter (). Aquí está:

<script type="text/javascript" src="/path/to/jquery.js"></script>
<script>
$(document).ready(function(){
$("#carrotlink").click(function(event){
event.preventDefault();
alert("starting ajax call.");
$.ajax({
type: "GET",
url: "http://my.datasource.page/",
data: "parameter=5",
success: function(data) {
alert("starting ajax callback");
result = "The oracle says: " + data;
jQuery("#ccbuy").fadeOut( function() { jQuery("#ccbuy").html(result); jQuery("#ccbuy").fadeIn(); });
alert("ajax callback complete");
}
});
alert("ajax call complete");
});
});
</script>

Si pongo esto en una página web normal, esto es lo que sucede:

  1. Hago clic en el enlace con ID "carrotlink".
  2. Recibo una alerta "comenzando una llamada ajax" seguida inmediatamente por "ajax call complete".
  3. Un momento después, recibo las alertas "comenzando la devolución de llamada ajax" y "devolución de llamada ajax completa".
  4. El div con ID "ccbuy" se desvanece y se desvanece con el nuevo contenido.

Cuando incluyo este código en una página de drupal, al hacer clic en el enlace aparece la alerta de "inicio de llamada ajax" y "llamada ajax completa", pero nunca recibo las alertas de devolución de llamada, y el div nunca cambia.

He pasado horas intentando depurar esto, resultandoen el caso simplificado anterior. Claramente, mi jquery está funcionando, el enlace de destino se está modificando según lo previsto, y se llama a la función deseada cuando hago clic en ella. La llamada ajax simplemente no está sucediendo. ¿Por qué podría ser esto?

PD - Sé que drupal tiene sus propios métodos parareemplazando el texto a través de ajax, así como drupal_add_js (). Pero ya escribí las funciones que trato de usar como parte de un sitio web independiente, y prefiero incluirlas en una página drupal que volver a implementar todo. ¡Y parece que está muy cerca de funcionar!

Respuestas

1 para la respuesta № 1

Es posible que te pierdas los envoltorios de comportamiento. intente envolver el texto en el código adjunto de comportamientos y comportamientos:

(function ($) {
Drupal.behaviors.ajax_example = {
attach:function (context) {

// If the site name is present set it to the username.
if ($("#site-name", context).length) {
$.ajax({
url: "/ajax/username",
success: function(data) {

// Change site name to current user name.
$("#site-name a span").html(data + ".com");
}
});
}
}
}
})(jQuery);

Escribí una publicación completa en el blog de mi compañía sobre cómo hacer ajax en Drupal 6 y 7, que también puede ser de ayuda: http://clikfocus.com/blog/simple-ajax-example-drupal-6-and-7