Как проще всего реализовать аякс с выдачей JSON в своем модуле на друпале?

Главные вкладки

Комментарии

Аватар пользователя olk olk 20 апреля 2011 в 19:51

Во первых надо определить хук 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();
  }
}
?>
Аватар пользователя Paradise Paradise 20 апреля 2011 в 20:32

olk wrote:
Во первых надо определить хук menu

Во вторых определить саму функцию возвращающую json

О, спасибо большое. Прям целый вечер мне спасли Smile

Аватар пользователя olk olk 21 апреля 2011 в 9:39

"Ильич Рамирес Санчес" wrote:
а ффффф шистйорке нед иво!
moar!!
вкусно )

В 6-ке есть drupal_json(), фактически то же самое

Аватар пользователя Ильич Рамирес Санчес Ильич Рамирес Санчес 21 апреля 2011 в 10:53

"olk" wrote:
В 6-ке есть drupal_json(), фактически то же самое

фффффф шистьорге приходицо делать вод таг:

<?php  drupal_set_header('Content-type: text/javascript; charset=utf-8');
  
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 = array(
    
'result' => 'success',
    
'data' => array(
      
'path' => $path,
      
'objects' => $objects,
      
'current_nid' => $parent_nid,
    ),
  );
  die(
drupal_to_js($result) );

?>
Аватар пользователя Brulik67 Brulik67 25 ноября 2012 в 11:35

если вы хотите поставить запрет на кэширование, то
не проще вместо этого:

"Ильич Рамирес Санчес" wrote:

<?php 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');?>

написать просто:

<?php
drupal_set_header
('Cache-Control: no-store, no-cache, must-revalidate, max-age=0');
?>

а то создаётся впечатление что вы сами не понимаете то чего делаете