在IE(7~10)中下载Json响应

12 浏览
0 Comments

在IE(7~10)中下载Json响应

我正在尝试上传一个文件并返回关于文件属性(名称、大小等)的json响应。在所有浏览器中都正常工作,除了IE。

IE试图将JSON作为文件下载!

我使用的是asp.net mvc4,文件上传操作具有HttpPost属性,并且我使用return Json(myObject);返回json响应。

以下是我的http头:

请求

键值
请求 POST /File/UploadFile/ HTTP/1.1
接受  text/html, application/xhtml+xml, */*
引用  http://localhost:63903/
接受语言 en-NZ
用户代理  Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)
内容类型    multipart/form-data; boundary=---------------------------7dc1e71330526
接受编码 gzip, deflate
主机    localhost:63903
内容长度  1377002
DNT 1
连接  Keep-Alive
缓存控制   no-cache

响应

键值

响应 HTTP/1.1 200 OK

服务器 ASP.NET Development Server/11.0.0.0

日期 Tue, 18 Dec 2012 23:44:19 GMT

X-AspNet-Version 4.0.30319

X-AspNetMvc-Version 4.0

缓存控制 private

内容类型 application/json; charset=utf-8

内容长度 154

连接 Close

我尝试了一些建议,但到目前为止还是回到原点!

0
0 Comments

在使用ASP.NET MVC 3或4的情况下,当IE尝试将Json响应作为文件下载时,只需在视图中添加对jquery.unobtrusive的引用即可解决此问题。例如:.Render("~/Scripts/jquery.unobtrusive-ajax.min.js")。一旦这个引用添加到视图中,IE就不再尝试从JsonResult控制器动作中下载json响应。无需更改响应类型等等。

我已经将这个文件包含在我的html页面中,但是IE仍然试图下载json响应。有什么帮助吗?我使用的是WebApi 2.0。

问题出现的原因是IE浏览器在尝试下载Json响应时出现问题。解决方法是在视图中添加对jquery.unobtrusive的引用。通过添加这个引用,IE将不再尝试从JsonResult控制器动作中下载json响应。以下是解决方法的具体步骤:

1. 在视图文件中找到需要引用jquery.unobtrusive的位置。

2. 在该位置添加以下代码:.Render("~/Scripts/jquery.unobtrusive-ajax.min.js")

3. 保存并重新加载页面。

通过以上步骤,IE浏览器将不再尝试下载Json响应,解决了该问题。

0
0 Comments

在处理IE(7~10)下载JSON响应的问题时,出现了以下几个解决方法:

1. 将JSON返回为"text/html",因为IE不知道如何处理"application/json"的内容。

return Json(myObject, "text/html");

2. 可以尝试使用"text/x-json",这可能会更正确一些。

return Json(myObject, "text/x-json");

3. 正确且最安全的内容类型实际上是"text/plain"。如果使用"text/html"作为内容类型,并且在JSON属性的值中返回HTML,IE8及更早版本会对响应内容做出奇怪的处理。

4. 当使用"text/html"作为内容类型并使用AjaxOptionsUpdateTargetId属性时,如果返回的内容类型是"text/html",它将用返回的JSON替换UpdateTargetId的内容。如果内容类型是"application/json",它将按预期工作。是否有任何方法可以解决这个问题?

5. 我尝试将内容类型更改为"text/plain",但IE8仍然试图下载它,将其设置为"text/html"则可以正常工作。

6. 对我来说,返回"text/plain"在所有浏览器上都有效。只需在另一端使用jQuery期望的JSON即可。

7. 请问您是否能提供一份参考资料(最好是来自Microsoft的)证明"IE不知道如何处理application/json的内容"这个说法?谢谢!

8. 我没有来自Microsoft的参考资料,但如果您在互联网上搜索,您会看到这给很多开发人员带来了很多麻烦。请参考以下链接:

- [stackoverflow.com/questions/17701992/](http://stackoverflow.com/questions/17701992)

- [stackoverflow.com/questions/2483771/](http://stackoverflow.com/questions/2483771%232492211)

- [twittercommunity.com/t/](https://twittercommunity.com/t/json-p-requests-mime-type-to-be-changed-to-application-javascript-instead-of-application-json/7236/2)

9. 您确定这是一个好的解决方法吗?仅仅因为IE有问题就将响应类型更改成不正确的类型。难道真的没有办法告诉IE将JSON显示为文本吗?

0