首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Joomla -返回JSON数据的控制器任务

Joomla -返回JSON数据的控制器任务
EN

Stack Overflow用户
提问于 2013-05-25 00:40:14
回答 7查看 12.4K关注 0票数 9

我的控制器中有任务run。我希望它返回JSON数据。现在,我将把我的JSON数据包装在模板HTML中。如何告诉Joomla只从控制器返回JSON数据?这是我拥有的函数:

代码语言:javascript
运行
复制
public function run  ( ) {

    JFactory::getDocument()->setMimeEncoding( 'application/json' );

    JResponse::setHeader('Content-Disposition','attachment;filename="progress-report-results.json"');

    JRequest::setVar('tmpl','component');

    $data = array(
        'foo' => 'bar'
    );

    echo json_encode( $data );

}

这将返回:

代码语言:javascript
运行
复制
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-gb" lang="en-gb" dir="ltr">
...
</head>
<body class="contentpane">

<div id="system-message-container">
</div>
    {"foo":"bar"}
</body>
</html>

我想要得到:

代码语言:javascript
运行
复制
{"foo":"bar"}
EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2013-05-26 01:42:30

您不需要构建一个特殊的JSON视图(view.json.php;或控制器progressreports.json.php)来实现这一点。您唯一需要做的就是回显JSON字符串并关闭应用程序。

代码语言:javascript
运行
复制
public function run( )
{
    JFactory::getDocument()->setMimeEncoding( 'application/json' );
    JResponse::setHeader('Content-Disposition','attachment;filename="progress-report-results.json"');

    $data = array(
        'foo' => 'bar'
    );
    echo json_encode( $data );
    JFactory::getApplication()->close(); // or jexit();
}

如果您希望为HTML和JSON输出(由调用者选择)提供相同的函数,则只需要一个单独的视图(或控制器)。

票数 17
EN

Stack Overflow用户

发布于 2013-05-25 03:31:51

现有控制器中的快速方法

您需要使用jexit()返回json数据,而不需要任何Joomla输出。

代码语言:javascript
运行
复制
public function run  ( ) {

    $data = array(
        'foo' => 'bar'
    );

    echo json_encode( $data );
    jexit();

}

Joomla 3.x方法

更好的替代方法是创建JSON控制器并使用JResponseJson输出JSON。文件名应具有JSON后缀。例如,如果你的控制器是一个项目,那么你的文件名可以是item.json.php,你可以添加如下所示的控制器代码。

代码语言:javascript
运行
复制
public function run  ( ) {
  $data = array(
    'foo' => 'bar'
  );
  echo new JResponseJson($data);
}

输出将是如下所示的json。

代码语言:javascript
运行
复制
{"success":true,"message":null,"messages":null,"data":["foo": "bar"]}

您的ajax URL应该有json参数来触发这个json控制器。

代码语言:javascript
运行
复制
index.php?option=com_mycomponent&task=item.run&format=json

使用JResponseJson通知错误和消息。请阅读以下位置的完整文档。

https://docs.joomla.org/JSON_Responses_with_JResponseJson

票数 4
EN

Stack Overflow用户

发布于 2013-05-25 00:55:23

找到答案了。

我需要做一个新的控制器。在我的例子中,原来的控制器被称为progressreports.php -我创建了一个名为progressreports.raw.php的新控制器。

然后,在调用url时,添加format=raw。即

代码语言:javascript
运行
复制
index.php?option=com_foo&task=progressreports.run&format=raw
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16739800

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档