/ / drupal 7 uniemożliwia działanie jquery ajax call - jquery, ajax, drupal

drupal 7 zapobiega działaniu wywołania ajax jquery - jquery, ajax, drupal

Mam pewien podręcznik - prosty kod jquery, który wywołuje wywołanie ajaxa i zapisuje wynik na stronie internetowej. Działa na własną rękę, ale nie na stronie w witrynie drupal 7.

Kod jest dołączany za pośrednictwem niestandardowego modułu, który zapisuje na stronie za pomocą hook_block_view_alter (). Oto ona:

<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>

Jeśli umieściłem to na zwykłej stronie internetowej, oto co się dzieje:

  1. Klikam na link z identyfikatorem "marchewka".
  2. Dostaję alert "rozpoczynając połączenie ajaxowe", a zaraz po nim "ajax call complete".
  3. Chwilę później dostaję powiadomienia "począwszy od callback ajax" i "callback ajax zakończone".
  4. Element div z identyfikatorem "ccbuy" znika i znika z nową treścią.

Po umieszczeniu tego kodu na stronie drupalnej kliknięcie tego łącza powoduje wyświetlenie alertów "Starting ajax call" i "ajax call complete", ale nigdy nie otrzymuję alertów zwrotnych, a element div nigdy się nie zmienia.

Spędziłem wiele godzin próbując to usunąćw uproszczonym przypadku powyżej. Oczywiście moje jquery działa, link docelowy jest zmieniany zgodnie z przeznaczeniem, a zamierzona funkcja jest wywoływana po kliknięciu. Połączenie ajaxowe po prostu się nie dzieje, dlaczego to możliwe?

PS - Wiem, że drupal ma swoje własne metodyzastępowanie tekstu przez ajax, a także drupal_add_js (). Ale już napisałem funkcje, których próbuję użyć jako część niezależnej strony internetowej, i raczej będę je umieszczał na stronie drupal, niż ponownie wdrażam wszystko i wydaje się, że jest to tak blisko pracy!

Odpowiedzi:

1 dla odpowiedzi № 1

Być może po prostu brakuje ci wrapperów zachowań. spróbuj owinąć tekst w zachowaniach i zachowaniach załóż kod:

(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);

Napisałem pełny wpis na blogu mojej firmy na temat wykonywania ajaxów w Drupal 6 i 7, które mogą być również pomocne: http://clikfocus.com/blog/simple-ajax-example-drupal-6-and-7