我有一些教科书简单的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>
如果我把它放在常规网页上,会发生以下情况:
当我在drupal页面中包含此代码时,单击该链接会显示“启动ajax调用”和“ajax调用完成”警报,但我从未收到回调警报,并且div永远不会更改。
我花了好几个小时试图调试它,导致上面的简化案例。很明显,我的jquery正在运行,目标链接正在按预期进行更改,当我单击它时会调用预期的函数。 ajax电话就是没有发生。为什么会这样?
PS - 我知道drupal有自己的方法来通过ajax替换文本,以及drupal_add_js()。但我已经编写了我试图用作独立网站的一部分的功能,我宁愿将它们包含在一个drupal页面中,而不是重新实现所有内容。它似乎离工作太近了!
答案 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