Symfony 1 - 为每个AJAX请求自动设置JSON内容类型

时间:2011-06-23 22:44:43

标签: symfony1

在我的webapplication中,我总是用JSON回复AJAX调用 因此,我发现自己在很多行动中都这样做了:

if ($request->isXmlHttpRequest()) {
    $this->getResponse()->setHttpHeader('Content-type', 'application/json');
    return $this->renderText(json_encode($details));
}

有没有办法自动获取:只要请求是AJAX,内容类型是JSON?

我在想我应该使用过滤器,但我不熟悉过滤器,也许有更好的解决方案。

任何建议都非常受欢迎。

谢谢,

2 个答案:

答案 0 :(得分:3)

我解决它的方式:

创建一个从myActions延伸的新类sfActions。在此类中创建一个新函数renderJson($data)

protected function renderJson($data) {
  $this->getResponse()->setHttpHeader('Content-type', 'application/json');
  return $this->renderText(json_encode($data));
}

现在让您的控制器类继承自myActions(而不是sfActions)。在控制器的末尾只有return $this->renderJson($data);

(我还在renderJson中做了一些模板化,如果在配置中设置了sf_debug,并且没有通过XmlHttp请求它。)

答案 1 :(得分:0)

我在我的一个项目中使用了类似的技术,但我建议你看一下关于iPhone优化的this article。您可以将路由设置为接受格式并根据该模板返回相应的模板。然后,您不需要设置标头,因为它是按请求的格式设置的。

当然,这意味着您需要为每个输出模板创建单独的模板文件,这似乎很麻烦,或者使用特定的布局文件并跳过模板。所以最终它可能几乎相同(或至少相同数量的代码)。