【发布时间】:2010-09-03 13:58:04
【问题描述】:
我想问是否可以创建一个输出 JSON 数据作为对 Jquery Ajax 请求的响应的页面?
以非drupal 方式,我只需创建一个php 文件,例如mypage.php,然后我将使用http://example.com/mypage.php?foo=bar 作为我的AJAX 请求的URL。然后,此页面将使用 json_encode() 输出 JSON 数据。
我怎样才能以 Drupal 的方式做到这一点?
【问题讨论】:
我想问是否可以创建一个输出 JSON 数据作为对 Jquery Ajax 请求的响应的页面?
以非drupal 方式,我只需创建一个php 文件,例如mypage.php,然后我将使用http://example.com/mypage.php?foo=bar 作为我的AJAX 请求的URL。然后,此页面将使用 json_encode() 输出 JSON 数据。
我怎样才能以 Drupal 的方式做到这一点?
【问题讨论】:
scott reynen 提示的一个工作示例:在 drupal 7 中, 在一个名为 mymodule 的模块中,写
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));
}
清除你的缓存,转到http://example.com/fancystuff/json 看看
【讨论】:
return views_get_view_result('fancystuff') .. 直接回到 json .. 哇
delivery callback 菜单参数...我只是按照drupal_json_output 函数的示例并创建我自己的回调来设置它以提供具有正确内容标题的二进制文件。很漂亮……
drupal_json_output 作为菜单项的传递回调有点风险,因为 MENU_NOT_FOUND 或 MENU_ACCESS_DENIED 之类的错误将无法正确处理。更安全的方法是省略delivery_callback 参数并从菜单回调中调用drupal_json_output(),如以下sn-p:return drupal_json_output(array("test" => true));
JSON server module 为您提供节点的 JSON 输出。
如果你想要更多的自定义JSON,你可以使用hook_menu()创建一个新的菜单回调(基本上是一个指向函数的URL路径)然后使用:
在该回调中以 JSON 格式而不是默认 HTML 格式发送输出。
【讨论】: