在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;
}
你可以改用drupal_json_output,这会自动更改标头,所以不需要exit()。
另一种选择是使用 hook_page_delivery_callback 更改该特定路径上的传递回调以及 $_SERVER 中的数据,然后使用 ajax_command 返回页面的有效数组。
第一个选项要容易得多,我自己从未尝试过第二个选项,但对于您的情况来说可能太多了。不幸的是,我不知道这些技术中的任何一种如何与 boost 一起表现,但希望其中一种能够奏效。