Ответ 1
Мне нравится этот путь!
//encode your data into JSON and send the response
$this->_helper->json($myArrayofData);
//nothing else will get executed after the line above
Я использую 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.: Большинство из приведенных выше способов связаны с вопросом, который был задан в отношении.
Мне нравится этот путь!
//encode your data into JSON and send the response
$this->_helper->json($myArrayofData);
//nothing else will get executed after the line above
Вам нужно отключить макет и просмотреть рендеринг.
Явный отключить макет и рендеринг рендеринга:
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);
}
Ваш код также должен будет отключить макет, чтобы остановить содержимое, обернутое стандартным шаблоном страницы. Но гораздо проще было бы:
$this->getHelper('json')->sendJson($arrResult);
помощник JSON будет кодировать вашу переменную как JSON, установить соответствующие заголовки и отключить макет и просмотреть script для вас.
Это намного проще.
public function init()
{
parent::init();
$this->_helper->contextSwitch()
->addActionContext('foo', 'json')
->initContext('json');
}
public function fooAction()
{
$this->view->foo = 'bar';
}