IE想从Django下载返回的JSON

时间:2011-03-17 14:10:55

标签: ajax django

我有一个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,这似乎没有任何区别。有人得到了修复吗?

2 个答案:

答案 0 :(得分:10)

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

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

一样简单
return HttpResponse( json.dumps( info ), mimetype="text/html" )

然后解析此响应您喜欢的任何框架(无论是本机JSON.parse还是jQuery.parse等)。

只应本地化为你是ajax上传文件的情况(就像你在这里一样)。

答案 1 :(得分:0)

尝试设置mime-type的“text / plain”,这应该有效。有关详细信息,请参阅此问题:

json xhr response opens a download file popup window

你可以在上一篇评论中找到为什么将mime-type设置为text / html是一个坏主意(打开你的网站进行XSS攻击)