【问题标题】:Best way to load data with AJAX in Drupal 7在 Drupal 7 中使用 AJAX 加载数据的最佳方式
【发布时间】:2012-04-17 08:58:48
【问题描述】:

在 Drupal 7 中加载异步数据的最佳方式是什么?

目前我正在使用 jQuery 和我自己的节点加载我的数据。我已经建立了一个自己的 menu_hook,它可以在 /events 下使用,例如/events/2012-04-17这个页面也可以正常浏览。我检查是否设置了$_SERVER['HTTP_X_REQUESTED_WITH'],如果是,我以 JSON 字符串返回数据并解析数据。

如果我激活一些缓存技术,我会遇到一些麻烦吗?还是有更好的方法来加载数据?似乎这不适用于 boost,因为我正在使用 die() 杀死脚本我还能做什么?

function my_module_menu() {
    $items['events'] = array(
        'page callback' => 'event_page',
        'access callback' => TRUE,
        'type' => MENU_LOCAL_TASK,
    );
    $items['events/%date'] = array(
        'page callback' => 'event_page',
        'page arguments' => array(2),
        'access callback' => TRUE,
        'type' => MENU_VISIBLE_IN_BREADCRUMB,
    );
    return $items;
}

function event_page($date=null) {
    $build=array();
    // add some other "controls"
    $build['submit'] = array(
        '#type' => 'submit',
        '#value' => t('Save'),
    );

    if((isset($_SERVER['HTTP_X_REQUESTED_WITH']) && 'XMLHttpRequest' == $_SERVER['HTTP_X_REQUESTED_WITH']) || strpos($_SERVER['REQUEST_URI'], '?json')!==FALSE) {
        header('Cache-Control: no-cache, must-revalidate');
        header('Content-type: application/json', true);
        $json=loadData();
        die(json_encode($json));
    }

    return $build;
}

【问题讨论】:

  • @NikhilMohan AFIK 是 die 的别名,不是吗?
  • 只是提醒其他人,您还需要发送 Vary Headers,以免浏览器显示缓存的 json 响应而不是 html。

标签: php jquery ajax drupal drupal-7


【解决方案1】:

您可以改用drupal_json_output,这将自动更改标题,因此不需要exit()。

另一种选择是使用hook_page_delivery_callback 结合来自$_SERVER 的数据更改特定路径上的传递回调,然后使用ajax_command 为页面返回一个有效数组。

第一个选项要容易得多,我自己从未尝试过第二个选项,但对于您的情况来说可能太多了。不幸的是,我不知道这两种技术中的任何一种如何与 boost 一起发挥作用,但希望其中一种能够奏效。

【讨论】:

  • 我也找到了这个选项。但是输出没有被缓存。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-23
相关资源
最近更新 更多