【问题标题】:Drupal create a page that outputs JSONDrupal 创建一个输出 JSON 的页面
【发布时间】: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 drupal


    【解决方案1】:

    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 作为交付方法有一个缺点。如果它无法提供内容,例如因为您无权查看它们,它将返回一个纯整数,引用一些描述问题的 drupal 常量,例如“3”。 HTTP 标头会显示 200 OK。
    • .. 今天又发生在我身上了。 2 是找不到文件,3 是 d7 中的访问被拒绝
    • 简单说明一下,使用drupal_json_output 作为菜单项的传递回调有点风险,因为 MENU_NOT_FOUND 或 MENU_ACCESS_DENIED 之类的错误将无法正确处理。更安全的方法是省略delivery_callback 参数并从菜单回调中调用drupal_json_output(),如以下sn-p:return drupal_json_output(array("test" => true));
    【解决方案2】:

    JSON server module 为您提供节点的 JSON 输出。

    如果你想要更多的自定义JSON,你可以使用hook_menu()创建一个新的菜单回调(基本上是一个指向函数的URL路径)然后使用:

    在该回调中以 JSON 格式而不是默认 HTML 格式发送输出。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多