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