ExtJs-IE8+IE9上的文件上载错误


ExtJs - File Uploading Error on IE8 + IE9

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

感谢

请告诉我。你使用的是什么版本。我使用的是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){
                        }
                    });
                }
            }]
        });

所以我找到了解决方案,问题是内容类型。通常我使用json响应,但IE8和IE9有问题,所以你必须发送一个"text/html"内容类型来解决这个问题

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

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

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

Chrome、FF、IE10和更高版本在响应标头中看到Content-Type=application/json时会执行此操作。然而,当你对IE8和IE9执行此操作时,当服务器从文件上传中响应时,你会看到一条消息,内容大致如下:"你想打开还是保存此文档"?

所以,要在IE8和IE9中解决这个问题,只需执行Content-Typetext/html即可。现代浏览器的响应是一样的,所以这个解决方案不会破坏任何东西。