【问题标题】:IE wants to download returned JSON from DjangoIE 想从 Django 下载返回的 JSON
【发布时间】:2011-07-17 10:43:07
【问题描述】:

我有一个 Django 站点,其中一个页面正在执行基于 AJAX 的文件上传(使用 Valum's file uploader),它通过 JSON 返回一些信息。 Django 返回 JSON 的方式是……

return HttpResponse( json.dumps( info ), mimetype="application/json" )

在 Firefox、Chrome 和 Safari 中尝试页面时,我得到文件上传器的适当行为,将上传标记为已完成,并且数据被插入到页面上的表格中。

在 IE8 中进行测试时,在 Django 发回 JSON 后,我得到了不正确的行为:出现一个下载对话框——如果你保存它,这是 JSON 文本——并且文件上传器继续认为文件正在上传,因为它有没有收到来自服务器的响应。 IE 必须看到响应并将其解释为下载,而不是将其传递给页面的 javscript。请注意,我已尝试将 mime 更改为 application/javascript,这似乎没有任何区别。有人解决了吗?

【问题讨论】:

  • IE 处理 iframe 的方式与 Firefox、Chrome、Safari 和 Opera 不同。您必须解决 IE 不支持的“importNode”方法。在我决定使用 SWFUpload 之前,这就是我愿意修复/调查的范围。
  • 哦,没错,iframe 后备。我可能最终会为

标签: ajax django


【解决方案1】:

尝试设置“text/plain”的 mime 类型,应该可以。有关详细信息,请参阅此问题:

json xhr response opens a download file popup window

您还可以在最后一条评论中找到为什么将 mime-type 设置为 text/html 是一个坏主意(打开您的网站以遭受 XSS 攻击)

【讨论】:

    【解决方案2】:

    IE 对来自 iframe 的“application/json”响应存在问题。

    虽然我不知道 Django 的细节,但我可以根据其他框架的经验说,解决这个问题的最简单方法之一是将响应返回为“text/html”,然后将该字符串解析为 JSON .在这种情况下,我猜这就像将响应更改为一样简单:

    return HttpResponse( json.dumps( info ), mimetype="text/html" )
    

    然后用你喜欢的任何框架解析这个响应(无论是原生 JSON.parse 还是 jQuery.parse 等)。

    应仅本地化到您正在通过 ajax 上传文件的情况(就像您在此处一样)。

    【讨论】:

      猜你喜欢
      • 2023-03-30
      • 2021-12-21
      • 2016-01-30
      • 2016-04-19
      • 2017-01-29
      • 2019-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多