EXTJS Fileupload - IE8安全栏问题

Ala*_*ain 1 javascript ajax internet-explorer extjs file-upload

我正在尝试使用EXTJS应用程序发送带附件的电子邮件.所以我有一个非常基本的表单,包括主题的文本字段,另一个带有inputType的文本字段:附件的'file'和一个html编辑器.

var panel = new Ext.form.FormPanel({
    fileUpload:true,
    labelAlign: 'right',        
    monitorValid: true,
    border: false,
    bodyBorder: false,       
    defaults:{
        anchor: '100%',
        labelStyle: 'font-weight:bold;'
    },
    items: [
        {
            xtype: 'textfield',
            fieldLabel: 'SUBJECT',
            name: 'subject',
            allowBlank: false
        },
        {
            xtype: 'textfield',
            fieldLabel: 'ATTACHMENT',
            name: 'file_to_upload',
            anchor: '80%',
            itemCls: 'attachment-field',
            allowBlank: true,
            inputType:'file'
        },
        {
            xtype: 'htmleditor',
            fieldLabel:'MESSAGE',
            name:'msg'
        }
    ]
});
Run Code Online (Sandbox Code Playgroud)

此表单放在一个窗口中,该窗口将提交给服务器:

var window = new Ext.Window({
    title: 'Compose a message',
    height: 600,
    width: 800,
    autoScroll: true,
    border: false,
    bodyBorder: false,        
    items: panel,
    buttons:[
        {
            text: 'Send',
            formBind: true,
            handler: function() {
                panel.getForm().submit({
                    url: *Call to the server*,
                    method  : 'POST',
                    timeout: 300000, // 5min
                    waitMsg: 'Please wait while we send your email',                        
                    success :function(form, action) {
                        window.close();
                    }                                                
                });
            }
        },
        {
            text: 'Close',
            handler: function() {
                window.close();
            }
        }
    ]
});
Run Code Online (Sandbox Code Playgroud)

当我使用FF将表单提交到服务器时,一切都很好.但IE8出现问题.IE正在显示安全栏,说我正在尝试将文件下载到计算机,这与我正在做的完全相反(我正在上传文件)!

如何防止触发此安全栏?

--EDIT 2010年12月18日16:48 EST--它是否可能由此引起:(来自EXTJS basicForm文档)

不使用常规的"Ajax"技术执行文件上载,即不使用XMLHttpRequests执行它们.而是以标准方式提交表单,其中DOM元素被临时修改以使其目标设置为引用动态生成的隐藏,其被插入到文档中但在收集返回数据之后被移除.浏览器解析服务器响应以创建IFRAME的文档.如果服务器使用JSON发送返回对象,则必须将Content-Type标头设置为"text/html",以告知浏览器将文本未更改地插入到文档正文中.对HTML解析器有意义的字符必须作为HTML实体发送,因此将"<"编码为"<",将"&"编码为"&"等.从文档中检索响应文本,并创建伪造的XMLHttpRequest对象包含responseText属性,以符合事件处理程序和回调的要求.请注意,文件上载数据包与内容类型multipart/form一起发送,并且某些服务器技术(尤其是JEE)可能需要一些自定义处理才能从数据包内容中检索参数名称和参数值.

我不认为我理解有关解释的一切......

- 结束编辑 -

谢谢阿兰

Eri*_*ler 6

在服务器端,你必须执行以下操作,即使它看起来有点奇怪:

  • 将响应类型设置为"text/html"
  • 将{"success":true}作为JSON对象发送

响应类型使浏览器在iframe中呈现响应ExtJS使用ExtJS从DOM读取,并将其解释为JSON,查找成功字段.