如何仅从 Zend 返回 JSON

2022-08-30 18:04:02

我正在使用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;

但是当我使用cURL来获取结果时,它返回了JSON字符串,周围有一些HTML标签。然后我尝试使用上述选项进行用户。它仍然没有成功。Zend_Rest_Controller

P.S.:上面的大多数方式都来自Stack Overflow上提出的问题。


答案 1

我喜欢这种方式!

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

答案 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);
}

推荐