2010-09-03 14 views
14

Me gustaría preguntar si se puede crear una página que emita datos JSON como respuesta a la solicitud de Jquery Ajax?Drupal crear una página que emita JSON

De una manera no drupal, simplemente crearía un archivo php, por ejemplo mypage.php y luego usaría http://example.com/mypage.php?foo=bar como la URL para mi solicitud AJAX. Esta página generará datos JSON usando json_encode().

¿Cómo puedo hacerlo de la manera Drupal?

Respuesta

20

El JSON server module le proporciona la salida JSON de nodos.

Si desea JSON más personalizado, puede utilizar hook_menu() para crear una nueva devolución de llamada del menú (básicamente una ruta URL señaló una función) y luego usar:

dentro de esa devolución de llamada para enviar el resultado como JSON en lugar del HTML predeterminado.

35

Un ejemplo de trabajo de pista de Scott Reynen: en Drupal 7, en un módulo llamado mimodulo, escribir

function mymodule_menu() { 
    $items['fancystuff/json'] = array(
     'access callback' => true, // available to all 
     'page callback'  => 'mymodule_fancystuff_object', // defined below 
     'delivery callback' => 'drupal_json_output' 
    ); 
    return $items; 
} 



function mymodule_fancystuff_object() { 
    return array('test'=>true,'dummy'=>array(0,1)); 
} 

claras sus caches, Goto http://example.com/fancystuff/json y he aquí

+0

incluso se puede 'volver views_get_view_result (' fancystuff ') '.. de nuevo a json .. wow – commonpike

+0

Gracias por señalar el argumento del menú' devolución de llamada' ... Simplemente lo configuré para entregar un archivo binario con el encabezado de contenido correcto siguiendo el ejemplo de 'drupal_json_output' funciono y creando mi propia devolución de llamada. Bastante ingenioso ... – thirdender

+1

hay una desventaja de usar drupal_json_output como método de entrega. si no puede entregar contenido, por ejemplo, porque no tiene derechos para verlos, devolverá un entero simple que hace referencia a alguna constante drupal que describa el problema, como "3". Los encabezados HTTP dirán 200 OK. – commonpike

Cuestiones relacionadas