如何从Zend公司只返回JSON(How to return only JSON from Zend

2019-07-19 15:04发布

我使用Zend Framework 1.x中为我的项目。 我想创建呼叫者功能的Web服务仅返回JSON字符串。 我试图用Zend_Controller_Action并应用这些方法:

1。

$this->getResponse()
     ->setHeader('Content-type', 'text/plain')
     ->setBody(json_encode($arrResult));

2。

$this->_helper->getHelper('contextSwitch')
              ->addActionContext('nctpaymenthandler', 'json')
              ->initContext();

3。

header('Content-type: application/json');

4。

$this->_response->setHeader('Content-type', 'application/json');

5。

echo Zend_Json::encode($arrResult);
exit;

6。

return json_encode($arrResult);

7。

$this->view->_response = $arrResult;

但是,当我用卷曲得到的结果,它返回用JSON字符串一些HTML标签包围。 然后我试图用户Zend_Rest_Controller与上述选项。 它仍然没有成功。

PS:大多数的这些方法以上是从已要求对堆栈溢出的问题。

Answer 1:

我喜欢这种方式!

//encode your data into JSON and send the response
$this->_helper->json($myArrayofData);
//nothing else will get executed after the line above


Answer 2:

你需要禁用布局和视图渲染。

明确禁止的布局和视图渲染:

public function getJsonResponseAction()
{
    $this->getHelper('Layout')
         ->disableLayout();

    $this->getHelper('ViewRenderer')
         ->setNoRender();

    $this->getResponse()
         ->setHeader('Content-Type', 'application/json');

    // should the content type should be UTF-8?
    // $this->getResponse()
    //      ->setHeader('Content-Type', 'application/json; charset=UTF-8');

    // ECHO JSON HERE

    return;
}

如果您使用JSON控制器动作助手,你需要一个JSON上下文到行动。 在这种情况下,JSON助手将禁用布局和视图渲染你。

public function init()
{
    $this->_helper->contextSwitch()
         ->addActionContext('getJsonResponse', array('json'))
         ->initContext();
}

public function getJsonResponseAction() 
{
    $jsonData = ''; // your json response

    return $this->_helper->json->sendJson($jsonData);
}


Answer 3:

您的代码将需要禁用布局,以及为了停止内容被包裹着的标准网页模板。 但一个更容易的办法也只是:

$this->getHelper('json')->sendJson($arrResult);

JSON助手将您的变量编码为JSON,设置相应的头文件和禁用布局和脚本为您服务。



Answer 4:

这是很容易。

public function init()
{
    parent::init();
    $this->_helper->contextSwitch()
        ->addActionContext('foo', 'json')
        ->initContext('json');
}

public function fooAction()
{
    $this->view->foo = 'bar';
}


文章来源: How to return only JSON from Zend