代码之家  ›  专栏  ›  技术社区  ›  Cheeso

如何说服ie简单地显示application/json而不是提供下载?

  •  157
  • Cheeso  · 技术社区  · 14 年前

    在调试使用ajax的jquery应用程序时,我经常需要看到服务返回给浏览器的json。所以我将把json数据的url放到地址栏中。

    这对aspnet很好,因为在发生编码错误时,我可以在浏览器中看到aspnet的诊断:

    alt text

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

    alt text

    我能不能让ie不那样做,换句话说,把它当作纯文本来显示?

    我知道如果将内容类型头设置为 text/plain .

    但这是一个aspnet mvc应用程序的上下文,当我在一个action方法上使用jsonresult时,它自动设置响应。另外,我希望保留适当的内容类型,而不是仅仅为了支持调试而更改它。

    9 回复  |  直到 7 年前
        1
  •  223
  •   Martijn Pieters    7 年前

    我找到了答案。

    您可以通过更新注册表将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 是这样的:

    alt text

    它的功能、工作原理:

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

    clsid和编码键得到的值与用于 image/gif , image/jpeg text/html .

    这个暗示来自 this site ,并且来自微软的文章 Handling MIME Types in Internet Explorer .


    在FF中,您也不需要外部附加组件。你可以使用 view-source: 伪协议。在地址栏中输入这样的url:

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

    这个伪协议以前也在IE中受支持,直到WinXP-SP2,微软出于安全原因禁用了它。

        2
  •  15
  •   Phil    12 年前

    我也有类似的问题。我用的是“$。getjson“jquery和所有东西在firefox和chrome中都工作得很好。

    但在IE中不起作用,所以我试图直接访问JSON的URL,但在IE中它问我是否想下载这个文件。

    经过多次搜索,我发现结果中一定有一个具有内容类型的头,在我的示例中,内容类型是:

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

    但是当发出请求的页面接收到这个json时,在ie中,必须指定相同的内容类型,在我的例子中是:

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

    拥抱

        3
  •  12
  •   Tomasz Maj    10 年前

    上面的解决方案遗漏了一些东西,下面的代码应该适用于所有情况:

    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,然后运行以修改注册表。

        4
  •  2
  •   Porschiey    11 年前

    如果您可以让ie将json打开到记事本中,那么您可以将系统的默认.json文件程序更改为记事本。

    为此,请创建或查找.json文件,右键单击,然后选择“打开方式”或“选择默认程序”。

    如果您碰巧想使用Internet Explorer,但您的IT公司不允许您编辑注册表,这可能很有用。否则,我推荐上述答案。

        5
  •  1
  •   Chetan S    14 年前

    我用 Fiddler 具有 JSONViewer 检查json的插件。我认为不可能让ie的行为举止不去修改注册表。 Here's 一些信息。

        6
  •  1
  •   Kev    12 年前

    更改ie的json mime类型设置将影响ie对待 全部的 json响应。

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

    两种选择都不可取。

    相反,您需要使用一个插件或工具,如上面提到的fiddler或任何其他网络流量检查器代理,在那里您可以选择每次如何处理json响应。

        7
  •  0
  •   Darin Dimitrov    14 年前

    firefox+firebug非常适合这个目的。因为 developer toolbar 我从未使用过,也不打算使用,所以我不能提供太多的反馈。

        8
  •  0
  •   Kintar    9 年前

    我刚才对xmlhttprequest也有同样的问题。这个网站在chrome和ff上运行完美,在生产中有几十个浏览器。这台机器(当然,我们公司准备将其设置为演示机)决定将提示保存对ajax请求的json响应。

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

        9
  •  -1
  •   asgerhallas    14 年前

    你可以在fiddler中看到响应: http://www.fiddler2.com/fiddler2/

    这是做这种事情的好工具!