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


IE wants to download my JSON response; other browsers work as expected

我的搜索使我相信这是为响应设置标题的问题。这个应用程序是使用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}

编辑:我在所有版本的IE中都有这个问题,包括IE9。我还尝试使用"文本/纯"的内容类型,没有用处。还修复了单词"private"的错别字。

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

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

就是这样,没有别的了,它可以在所有浏览器上运行。这些我都可以测试,包括ie9。

如果浏览器要求您下载JSON文档,则不会出错。默认情况下,浏览器不会显示具有适当内容类型的JSON,除非你安装了一些扩展(例如Firefox中的JSONView)。

如果你只是想查看你的脚本创建的JSON,使用这样的扩展或临时使用文本内容类型(如text/plaintext/javascript)。在其他情况下保持原样,因为JSON应该带着正确的内容类型发送。

您是否尝试过将Content-Disposition设置为"inline"(即删除';文件名="files.json")?

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

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

因为我认为这个触发了下载

如果不是这样的话,我会首先删除所有的头,然后检查它们是否都写得正确(参见"private"),并首先测试没有头,然后逐个添加它们,以找出哪一个触发你的问题。

相关文章: