在调试使用AJAX的jQuery应用程序时,我经常需要查看服务返回给浏览器的json。所以我将把JSON数据的URL丢弃到地址栏中。
这对ASPNET很好,因为在编码错误的情况下,我可以在浏览器中看到ASPNET诊断:
但是当服务器端代码正常工作并实际返回JSON时,IE会提示我下载它,所以我看不到响应。
我可以让IE不这样做,换句话说,只是将它显示为纯文本吗?
我知道如果我将Content-Type标头设置为text/plain
,我就可以这样做。
但这是一个ASPNET MVC应用程序的上下文,它在我的一个动作方法上使用JsonResult时自动设置响应。此外,我有点想保留适当的内容类型,而不是仅仅为了支持调试工作而改变它。
答案 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/json
或Content-Type: text/json
的文档的网址时,您获得的新行为如下所示:
它的作用,为什么它起作用:
25336920-03F9-11cf-8FD0-00AA00686F13
是“就地浏览”操作的CLSID。基本上这个注册表项告诉IE,对于具有mime类型的application / json的文档,只需查看它。这不会影响通过<script>
标签或XHR等下载的任何application / json文档。
CLSID和编码键获得与image/gif
,image/jpeg
和text/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)
我使用Fiddler和JSONViewer插件来检查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/
对于这样的事情来说,这是一个很好的工具!