1

我在实际的 EXTJS 版本上创建了一个文件上传到我的服务器。如果文件上传成功,后端会创建一个 json 响应以在前端进行处理。在 Chrome 和 Firefox 上它工作正常,但在 IE 上它总是将 json 响应作为文件下载并中断这个过程,知道如何在 IE 上防止这种情况发生吗?

谢谢

4

3 回答 3

1

请告诉我。您使用的是什么版本。我正在使用 extjs 3.4 文件在所有浏览器中上传其工作文件。

   new Ext.form.FormPanel({

            fileUpload : true,

            items:[new Ext.form.TextField({
                id:"iconUpload",
                fieldLabel: 'Image',
                inputType: 'file',
                name: 'appIcon'

            })],
            listeners : {
                render : function(form){
                }
            },
            buttonAlign: 'center',
            buttons: [{
                text     : 'Submit',
                formBind : true,
                handler  : function(){
                   itemPanel.getForm().submit({
                        waitMsg: "Progress ...",
                        success: function(form, action){

                        },
                        failure: function(form, action){

                        }
                    });

                }
            }]

        });
于 2013-09-02T14:48:32.290 回答
1

所以我找到了解决方案,问题出在 Content-Type 上。通常我使用的是 json 响应,但是 IE8 和 IE9 遇到了问题,所以你必须发送一个“text/html”内容类型来解决这个问题

于 2013-09-03T15:26:21.310 回答
0

MartinMB 的回答基本上是正确的。这个答案旨在提供更多背景知识。

在 Ext JS中,文件上传不是使用普通的“Ajax”技术执行的,也就是说它们不是使用 XMLHttpRequests 执行的。相反,一个包含所有字段的隐藏元素被临时创建并提交,其目标集是指一个动态生成的隐藏元素,该元素被插入到文档中,但在收集返回数据后被删除。

浏览器解析服务器响应以创建 IFRAME 的文档。如果服务器使用 JSON 发送返回对象,则Content-Type必须将标头设置为text/html以告诉浏览器将未更改的文本插入到文档正文中。

Chrome、FF、IE10 及更高版本仅在他们在响应标头中看到Content-Type=时才会执行此操作。application/json但是,当您对 IE8 和 IE9 执行此操作时,当服务器从文件上传响应时,您会看到一条消息,内容类似于:“您要打开还是保存此文档”?

因此,要在 IE8 和 IE9 中修复该问题,只需执行此操作Content-Type即可text/html。现代浏览器的响应是一样的,所以你不会用那个解决方案破坏任何东西。

于 2015-04-03T06:30:00.527 回答