我在实际的 EXTJS 版本上创建了一个文件上传到我的服务器。如果文件上传成功,后端会创建一个 json 响应以在前端进行处理。在 Chrome 和 Firefox 上它工作正常,但在 IE 上它总是将 json 响应作为文件下载并中断这个过程,知道如何在 IE 上防止这种情况发生吗?
谢谢
我在实际的 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){
}
});
}
}]
});
所以我找到了解决方案,问题出在 Content-Type 上。通常我使用的是 json 响应,但是 IE8 和 IE9 遇到了问题,所以你必须发送一个“text/html”内容类型来解决这个问题
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
。现代浏览器的响应是一样的,所以你不会用那个解决方案破坏任何东西。