如果使用 iframe,IE 8 和 9 尝试下载 json 响应

Posted

技术标签:

【中文标题】如果使用 iframe,IE 8 和 9 尝试下载 json 响应【英文标题】:IE 8 & 9 try to download json response if using iframe 【发布时间】:2014-03-04 04:21:40 【问题描述】:

我正在使用 blueimp fileUpload 插件将文件发送到服务器,并且在 ie 8 和 ie 9 中它会尝试提示我下载文件。当我打开文件时,它是完美的 json。

我尝试将内容类型设置为 text/plain 以及将 dataType 设置为 text/plain 但无济于事。

我也在使用 FubuMVC,所以我不能只返回一个字符串。如果它不是 json,那么它会尝试渲染视图。

var obj = 
            dataType: 'json',
            contentType: "application/json",
            url: uploadUrl,
            formData: formData,
            start: function(e, data) 
                $('#' + loadingDiv).dialog('open');
            ,
            stop: function(e, data) 
                $('#' + loadingDiv).dialog('close');
            ,
            add: function(e, data) 
                data.formData = obj.formData;
                data.submit();
            ,

            always: function(e, data) 
                alert('done');
            
        ;

        $('#' + div).fileupload(obj);

【问题讨论】:

你试过内容类型application/json吗?那应该是官方的 mime 类型。 是的,但这不起作用。问题是,如果它认为它是 json 并且它正在使用 iFrame,那么它会尝试下载结果。我想欺骗它认为它只是文本 那就试着提供一些你的相关代码,否则就如同在雾霭中摇摇晃晃的。 【参考方案1】:

如果您的操作方法返回字符串,则内容类型设置为text/plain,浏览器应显示字符串而不是尝试下载文件。

或者您可以在您的操作方法中使用IHttpWriter

【讨论】:

我不能这样做,因为我正在使用 FubuMVC 并且需要返回一个对象 我也在使用 FubuMVC。字符串是一个对象,也是一个引用类型,所以它对于返回类型是完全有效的。事实上,我昨天用过,效果很好。

以上是关于如果使用 iframe,IE 8 和 9 尝试下载 json 响应的主要内容,如果未能解决你的问题,请参考以下文章

IE9 - 主页中的怪癖模式和特定 iframe 中的“Internet Explorer 9 标准”

在 IE9 的内部 iframe 中忽略 EmulateIE8

ie 下面 js动态设置 iframe src 不显示,一片空白

Meteor.js 应用程序不支持 IE 9

提交表单后的 IE-8 Iframe 页面重定向问题

嵌入在 iframe 中的 Three.js 在 iOS 8/9 中不断增长