Подтвердить что ты не робот

Как вернуть только JSON из Zend

Я использую Zend Framework 1.x для моего проекта. Я хочу создать веб-службу, которая возвращает только строку 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.: Большинство из приведенных выше способов связаны с вопросом, который был задан в отношении.

4b9b3361

Ответ 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 controller, вам нужно добавить 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);
}

Ответ 3

Ваш код также должен будет отключить макет, чтобы остановить содержимое, обернутое стандартным шаблоном страницы. Но гораздо проще было бы:

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

помощник JSON будет кодировать вашу переменную как JSON, установить соответствующие заголовки и отключить макет и просмотреть script для вас.

Ответ 4

Это намного проще.

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

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