drupal 7防止jquery ajax调用工作

时间:2012-09-27 18:52:52

标签: jquery ajax drupal

我有一些教科书简单的jquery代码,可以进行ajax调用并将结果写入网页。它可以单独工作,但不包含在drupal 7站点的页面中。

通过使用hook_block_view_alter()写入页面的自定义模块包含代码。这是:

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

如果我把它放在常规网页上,会发生以下情况:

  1. 点击ID为“carrotlink”的链接。
  2. 我收到“启动ajax呼叫”的警报,紧接着是“ajax呼叫完成”。
  3. 片刻之后,我收到警报“启动ajax回调”和“ajax回调完成”。
  4. ID为“ccbuy”的div淡出并淡入新内容。
  5. 当我在drupal页面中包含此代码时,单击该链接会显示“启动ajax调用”和“ajax调用完成”警报,但我从未收到回调警报,并且div永远不会更改。

    我花了好几个小时试图调试它,导致上面的简化案例。很明显,我的jquery正在运行,目标链接正在按预期进行更改,当我单击它时会调用预期的函数。 ajax电话就是没有发生。为什么会这样?

    PS - 我知道drupal有自己的方法来通过ajax替换文本,以及drupal_add_js()。但我已经编写了我试图用作独立网站的一部分的功能,我宁愿将它们包含在一个drupal页面中,而不是重新实现所有内容。它似乎离工作太近了!

1 个答案:

答案 0 :(得分:1)

您可能只是缺少行为包装器。尝试将文本包装在行为和行为附加代码中:

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

我为我的公司博客撰写了一篇关于在Drupal 6&amp; s中执行ajax的完整博客文章。 7也可能有所帮助:http://clikfocus.com/blog/simple-ajax-example-drupal-6-and-7