刷新Drupal中的div

时间:2011-11-15 23:07:18

标签: php javascript drupal

我已经创建了加载JavaScript代码的模块。我在网上看到它应该让我的div更新,但事实并非如此,我不知道为什么。

这是我的代码:

.module

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

JavaScript代码

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

2 个答案:

答案 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);