我已经创建了加载JavaScript代码的模块。我在网上看到它应该让我的div更新,但事实并非如此,我不知道为什么。
这是我的代码:
<?php
function div_refresh_init() {
drupal_add_js(drupal_get_path('module', 'div_refresh') . '/div_refresh.js');
}
function dev_refresh_menu() {
$items = array();
$items[] = array(
'path' => 'div_refresh/update',
'callback' => 'div_refresh_update',
'type' => MENU_CALLBACK,
'access' => TRUE,
);
return $items;
}
function div_refresh_update() {
$html = get_data();
print drupal_to_js(array('html' => $html));
exit();
}
function autoupdate() {
$.ajax(
{
type: "POST",
url: "div_refresh/update",
cache: false,
success: function(data) {
var result = Drupal.parseJson(data);
$("div.autorefresh").fadeIn("slow").html(result['html']);
}
});
}
if (Drupal.jsEnabled) {
$(document).ready(function() {
setInterval("autoupdate()", 5000);
});
}
答案 0 :(得分:1)
你的JS看起来很好(只要页面上有一个<div>
,类autorefresh
};我认为这是菜单回调函数的问题。
你得到的代码看起来像Drupal 5而且我会采取刺激你实际上使用Drupal 6?如果是这样,hook_menu()
的实现应如下所示:
function dev_refresh_menu() {
$items['div_refresh/update'] = array(
'page callback' => 'div_refresh_update',
'type' => MENU_CALLBACK,
'access callback' => TRUE,
);
return $items;
}
您可以直接转到www.mysite.com/div_refresh/update
进行确认,如果您收到404,则Drupal没有您的菜单项记录。
另外请记住在完成更改后清除Drupal的缓存,否则将无法获取新项目。
答案 1 :(得分:0)
在setInterval中,避免将函数作为字符串传递,eval是邪恶的;)
setInterval(function() { autoupdate() }, 5000);