所以我的问题是:将响应的html作为JSON编码字符串返回的最佳方法是什么?
我知道有典型的json动作助手,但他们不符合我的需要。
如果请求是ajax请求,我需要的是一种将视图的完整html作为json字符串返回的方法。 因为我想更改我的应用程序只加载主容器的内容,我还需要在请求期间传递一些其他变量,我需要找到一种方法:)
也许有人已经有过一些经验!
答案 0 :(得分:1)
我可以提出另一个解决方案:
1 - 在plugins
目录中创建一个application
目录
在此目录中,像这样创建插件POutput.php
:
<?php
class Application_Plugin_POutput extends Zend_Controller_Plugin_Abstract
{
public function postDispatch(Zend_Controller_Request_Abstract $request)
{
if (Zend_Registry::get('Output_Json'))
Zend_Layout::getMvcInstance()->setLayout('layout_json');
}
}
2 - 像这样创建一个新的布局“layout_json.phtml”:
<?php
echo $this->json($this->layout()->content); ?>
您可以看到documentation有关此帮助程序的选项
3 - 像bootstrap
那样调用插件:
protected function _initPlugins(){
$front = Zend_Controller_Front::getInstance();
$front->registerPlugin(new Application_Plugin_POutput());
}
4 - 例如,在bootstrap中,像这样启动变量Output_Json
:
protected function _initJson(){
Zend_Registry::set('Output_Json', true); // true for Json output, False for Html output
}
使用此方法,您无需更改所有控制器。 ;)
我希望能回答你的问题。 :)
答案 1 :(得分:0)
我不知道最好的方法是什么,但是我会把你给我。
要将json发送到ajax调用,我在控制器中执行此操作。我禁用布局,查看,然后发送json。
例如发送数组,我这样做:
public function fooAction() {
$this->disableLayout();
$this->_helper->viewRenderer->setNoRender(true);
...
//get array $auth with value $authentification
$auth = array('authentification' => $authentification);
return $this->_helper->json($auth);
}
它运作良好:)
答案 2 :(得分:0)
如果您想要一个与您的模型层交互的Json响应,您应该使用它:
return new JsonModel(array);
如果你需要一个简单的响应,你应该使用Response类,如下所示:
$response = new Response();
$response->getHeaders()->addHeaders(
array(
'Content-type' => 'application/json'
));
$response->setContent($yourContent);
return $response;