我怎么能说服IE只显示application / json而不是提供下载呢?

时间:2010-03-20 16:16:49

标签: jquery asp.net-mvc ajax asp.net-ajax internet-explorer

在调试使用AJAX的jQuery应用程序时,我经常需要查看服务返回给浏览器的json。所以我将把JSON数据的URL丢弃到地址栏中。

这对ASPNET很好,因为在编码错误的情况下,我可以在浏览器中看到ASPNET诊断:

alt text

但是当服务器端代码正常工作并实际返回JSON时,IE会提示我下载它,所以我看不到响应。

alt text

我可以让IE不这样做,换句话说,只是将它显示为纯文本吗?

我知道如果我将Content-Type标头设置为text/plain,我就可以这样做。

但这是一个ASPNET MVC应用程序的上下文,它在我的一个动作方法上使用JsonResult时自动设置响应。此外,我有点想保留适当的内容类型,而不是仅仅为了支持调试工作而改变它。

9 个答案:

答案 0 :(得分:223)

我找到了答案。

您可以通过更新注册表将IE8配置为在浏览器窗口中显示application / json。不需要外部工具。我没有对此进行广泛测试,但它适用于Vista上的IE8。

要使用此功能,请记住,有关更新注册表的所有常见注意事项均适用。停止IE。然后,将以下内容剪切并粘贴到文件中,名称为json-ie.reg

Windows Registry Editor Version 5.00
;
; Tell IE to open JSON documents in the browser.  
; 25336920-03F9-11cf-8FD0-00AA00686F13 is the CLSID for the "Browse in place" .
;  

[HKEY_CLASSES_ROOT\MIME\Database\Content Type\application/json]
"CLSID"="{25336920-03F9-11cf-8FD0-00AA00686F13}"
"Encoding"=hex:08,00,00,00

[HKEY_CLASSES_ROOT\MIME\Database\Content Type\text/json]
"CLSID"="{25336920-03F9-11cf-8FD0-00AA00686F13}"
"Encoding"=hex:08,00,00,00

然后双击.reg文件。重启IE。在勾选返回包含Content-Type: application/jsonContent-Type: text/json的文档的网址时,您获得的新行为如下所示:

alt text

它的作用,为什么它起作用:

25336920-03F9-11cf-8FD0-00AA00686F13是“就地浏览”操作的CLSID。基本上这个注册表项告诉IE,对于具有mime类型的application / json的文档,只需查看它。这不会影响通过<script>标签或XHR等下载的任何application / json文档。

CLSID和编码键获得与image/gifimage/jpegtext/html相同的值。

此提示来自this site,以及Microsoft的文章Handling MIME Types in Internet Explorer


在FF中,您也不需要外部加载项。您只需使用view-source:伪协议即可。在地址栏中输入这样的URL:

view-source:http://myserver/MyUrl/That/emits/Application/json

这个伪协议曾经在IE中得到支持,直到WinXP-sp2,当微软出于安全原因禁用它时。

答案 1 :(得分:15)

我有类似的问题。我正在使用&#34; $。的getJSON&#34; jQuery和一切都在Firefox和Chrome中完美运行。

但它在IE中无效。所以我试图直接访问json的URL,但在IE中它询问我是否要下载该文件。

经过多次搜索后,我发现结果中必须有一个带有内容类型的标题,在我的例子中,内容类型是:

header("Content-type: text/html; charset=iso-8859-1");

但是当发出请求的页面收到这个json时,在IE中,你必须指定SAME CONTENT-TYPE,在我的例子中是:

$.getJSON (
"<? site_url php echo (" ajax / tipoMenu ")?>"
{contentType: 'text / html; charset = utf-8'},
function (result) {

拥抱

答案 2 :(得分:12)

以上解决方案缺少了,下面的代码应该适用于所有情况:

Windows Registry Editor Version 5.00
;
; Tell IE to open JSON documents in the browser.  
; 25336920-03F9-11cf-8FD0-00AA00686F13 is the CLSID for the "Browse in place" .
;  

[HKEY_CLASSES_ROOT\MIME\Database\Content Type\application/json]
"CLSID"="{25336920-03F9-11cf-8FD0-00AA00686F13}"
"Encoding"=hex:08,00,00,00

[HKEY_CLASSES_ROOT\MIME\Database\Content Type\application/x-json]
"CLSID"="{25336920-03F9-11cf-8FD0-00AA00686F13}"
"Encoding"=hex:08,00,00,00

[HKEY_CLASSES_ROOT\MIME\Database\Content Type\text/json]
"CLSID"="{25336920-03F9-11cf-8FD0-00AA00686F13}"
"Encoding"=hex:08,00,00,00

只需保存文件json.reg,然后运行以修改注册表。

答案 3 :(得分:2)

如果您只是让IE将JSON打开到记事本中即可,您可以将系统的.json文件的默认程序更改为记事本。

要执行此操作,请创建或查找.json文件,单击鼠标右键,然后选择“打开方式”或“选择默认程序”。

如果您偶然想要使用Internet Explorer但您的IT公司不会让您编辑注册表,这可能会派上用场。否则,我建议上面的答案。

答案 4 :(得分:1)

我使用FiddlerJSONViewer插件来检查JSON。我不认为有可能让IE在没有摆弄注册表的情况下表现出来。 Here's一些信息。

答案 5 :(得分:1)

更改IE的JSON mime类型设置将影响IE处理所有 JSON响应的方式。

将mime-type标头更改为text / html将有效地告诉任何浏览器您返回的JSON响应不是JSON而是纯文本。

这两种选择都不可取。

相反,您可能希望使用插件或工具,如上面提到的Fiddler或任何其他网络流量检查器代理,您可以在每次选择如何处理JSON响应。

答案 6 :(得分:0)

FireFox + FireBug非常适合这个目的。对于IE,有一个developer toolbar我从未使用过并打算使用,所以我无法提供太多反馈。

答案 7 :(得分:0)

我遇到了与XMLHttpRequest相同的问题。该网站在Chrome和FF以及生产中的数十种Internet Explorer浏览器中运行良好。这台ONE机器(我们公司设置为演示机器的机器)当然决定它将提示将json响应保存到ajax请求。

下面接受的regedit解决方案修复了它。感谢。

答案 8 :(得分:-1)

你可以在Fiddler中看到答案:http://www.fiddler2.com/fiddler2/

对于这样的事情来说,这是一个很好的工具!