Как проще всего реализовать аякс с выдачей JSON в своем модуле на друпале?
20 апреля 2011 в 19:35
Каким образом можно в своем модуле сделать действие типа mysite.ru/get_my_ajax, чтобы оно выдавало json?
- Блог
- Войдите или зарегистрируйтесь, чтобы отправлять комментарии
Комментарии
Во первых надо определить хук menu
<?php
/**
* implementation of hook_menu()
*/
function my_module_name_menu() {
$items = array();
$items['get_my_ajax'] = array(
'page callback' => 'my_module_name_get_my_ajax',
'access arguments' => array('access content'),
'type' => MENU_CALLBACK,
);
return $items;
}
?>
Во вторых определить саму функцию возвращающую json
<?php
function my_module_name_get_my_ajax() {
if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') {
$data = 'тут какие то данные которые вы хатите вернуть';
drupal_json_output(
array(
'status' => TRUE,
'data' => $data,
));
exit();
}
else {
drupal_not_found();
}
}
?>
О, спасибо большое. Прям целый вечер мне спасли
'delivery callback' => 'ajax_deliver'
header
а ффффф шистйорке нед иво!
moar!!
вкусно )
В 6-ке есть drupal_json(), фактически то же самое
фффффф шистьорге приходицо делать вод таг:
<?php drupal_set_header('Content-type: text/javascript; charset=utf-8');
$result = array(
drupal_set_header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
drupal_set_header('Last-Modified: '. gmdate('D, d M Y H:i:s') .' GMT');
drupal_set_header('Cache-Control: no-store, no-cache, must-revalidate');
drupal_set_header('Pragma: no-cache');
......
'result' => 'success',
'data' => array(
'path' => $path,
'objects' => $objects,
'current_nid' => $parent_nid,
),
);
die(drupal_to_js($result) ); ?>
о боже о_О
ай щя бродилку па дереву нод пешу. это от нее.
Санчес, да вроде не приходится писать так
'status' => TRUE,
'data' => array(
'path' => $path,
'objects' => $objects,
'current_nid' => $parent_nid,
),
));
ну да. у меня есть часть привычек с 5ки.
если вы хотите поставить запрет на кэширование, то
не проще вместо этого:
написать просто:
<?php
drupal_set_header('Cache-Control: no-store, no-cache, must-revalidate, max-age=0');
?>
а то создаётся впечатление что вы сами не понимаете то чего делаете