【发布时间】:2011-05-27 04:40:00
【问题描述】:
我正在尝试制作一个 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'
}
]
});
这个表单被放置在一个窗口中,该窗口将提交给服务器:
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();
}
}
]
});
当我使用 FF 将表单提交到服务器时,一切都很好。但是IE8出现问题。 IE 显示安全栏说我正在尝试将文件下载到计算机,这与我正在做的完全相反(我正在上传文件)!
如何防止触发此安全栏?
--编辑 2010 年 12 月 18 日 16:48 EST-- 是否有可能是由这个引起的:(来自 EXTJS basicForm 文档)
文件上传不是使用普通的“Ajax”技术执行的,也就是说它们不是使用 XMLHttpRequests 执行的。取而代之的是,表单以标准方式提交,并临时修改了 DOM 元素,使其目标设置为引用动态生成的隐藏对象,该对象被插入到文档中,但在收集返回数据后被删除。浏览器解析服务器响应以创建 IFRAME 文档。如果服务器使用 JSON 发送返回对象,则 Content-Type 标头必须设置为“text/html”,以便告诉浏览器将未更改的文本插入到文档正文中。对 HTML 解析器很重要的字符必须作为 HTML 实体发送,因此将“
我不认为我理解那里的解释的所有内容......
-- 结束编辑--
谢谢 阿兰
【问题讨论】:
标签: javascript ajax internet-explorer file-upload extjs