IE想要下载我的JSON响应;其他浏览器按预期工作

时间:2011-12-15 18:21:20

标签: php ajax json zend-framework

我的搜索让我相信这是为响应设置标题的问题。此应用程序是使用Zend框架构建的,这里是要设置的标头(此响应包含有关文件上载的信息):

$response
    ->setHeader('Expires', 'Mon, 26 Jul 1997 05:00:00 GMT')
    ->setHeader('Cache-Control', 'private, no-cache')
    ->setHeader('Pragma', 'no-cache')
    ->setHeader('Content-Disposition', 'inline; filename="files.json"')
    ->setHeader('X-Content-Type-Options', 'nosniff')
    ->setHeader('Content-type', 'application/json; charset=UTF-8');

这是“files.json”的内容:     { “webpath”: “http://www.domain.com/avatar/38b/3ef/f8b/a4c62a71.jpg”, “的file_id”: “484”, “高度”:250, “宽度”:250} < / p>

编辑:我在IE的所有版本中遇到此问题,包括IE9。我也尝试使用'text / plain'作为Content-type,但没有用。同时修正了“私人”一词的拼写错误。

4 个答案:

答案 0 :(得分:0)

当我返回json时,我在whateverAction()中设置了以下内容: -

$this->getResponse()->setHttpResponseCode(200);
$this->getResponse()->setHeader('Content-Type', 'application/json');
$this->getResponse()->setBody($Json());

就是这样,没有别的,它适用于所有浏览器。无论如何我还可以测试所有这些,包括IE 9。

答案 1 :(得分:0)

如果浏览器要求您下载JSON文档,则没有任何问题。默认情况下,除非您安装了某个扩展程序(例如Firefox中的JSONView),否则浏览器不会显示内联类型正确的JSON。

如果您只想查看脚本创建的JSON,请使用此类扩展名或暂时使用文本内容类型(例如text/plaintext/javascript)。在其他情况下保持原样,因为JSON应该以适当的内容类型发送。

答案 2 :(得分:0)

您是否尝试将内容处置设置为“内联”(即删除'; filename =“files.json”')?

答案 3 :(得分:-2)

标题告诉IE下载文件。我会删除

->setHeader('Content-Disposition', 'inline; filename="files.json"')

因为我认为这会触发下载。

如果情况并非如此,我会首先删除所有标题,然后检查它们是否都写得正确(请参阅&#34;私有&#34;)并首先测试没有标题,然后添加它们一个接一个地找出哪一个触发你的问题。那么请写下它要进一步研究它。