Symfony1 Symfony 1-为每个AJAX请求自动设置JSON内容类型
在我的Web应用程序中,我总是用JSON回复AJAX调用。Symfony1 Symfony 1-为每个AJAX请求自动设置JSON内容类型,symfony1,Symfony1,在我的Web应用程序中,我总是用JSON回复AJAX调用。 因此,我发现自己在很多行动中都这样做: if ($request->isXmlHttpRequest()) { $this->getResponse()->setHttpHeader('Content-type', 'application/json'); return $this->renderText(json_encode($details)); } 有没有一种方法可以自动获取:只要请求是
因此,我发现自己在很多行动中都这样做:
if ($request->isXmlHttpRequest()) {
$this->getResponse()->setHttpHeader('Content-type', 'application/json');
return $this->renderText(json_encode($details));
}
有没有一种方法可以自动获取:只要请求是AJAX,内容类型就是JSON
我想我应该使用一个过滤器,也许,但我不熟悉的过滤器,也许有一个更好的解决方案
任何建议都是非常受欢迎的
谢谢,丹我解决问题的方法: 创建一个新类
myActions
,该类从sfActions
扩展而来。在此类中创建一个新函数renderJson($data)
:
现在让您的控制器类继承自myActions
(而不是sfActions
)。在控制器的末尾,只需返回$this->renderJson($data)代码>
(我还做了一些模板设计。在renderJson中,如果配置中设置了
sf_debug
,并且没有通过XmlHttp请求它。)我在我的一个项目中使用了类似的技术,但我建议也看看iPhone优化。您可以将路由设置为接受格式,并基于该格式返回相应的模板。然后,您不需要设置标头,因为它是由请求的格式设置的
当然,这意味着您需要为每个输出模板创建单独的模板文件(这似乎很麻烦),或者使用特定的布局文件并跳过模板。因此,最终它可能相当于几乎相同的东西(或者至少是相同数量的代码)
protected function renderJson($data) {
$this->getResponse()->setHttpHeader('Content-type', 'application/json');
return $this->renderText(json_encode($data));
}