无论表单是通过 GET 还是 POST 提交,IE 都没有办法将文件数据转换成可以传输到服务器的文本字符串。
为了在不重新加载页面的情况下执行文件 POST,您需要以下对象:FormData、XHR.upload、File.files。“XHR”是 xmlHTTPRequest 对象,“File”是文件选择器的 DOM 实例。
如果上述任何一项不受支持,您可以回退到常规形式的 POST:
if (!self.FormData||!xhr.upload||document.getElementById('file').files) {
document.getElementById('form').submit();
return;
}
然后按如下方式获取表单数据:
var fd=new FormData();
fd.append('file',document.getElementById('file').files[0]);
xhr.open('POST',...); //complete your Ajax post here
xhr.send(fd); //the form data is sent here, with the file
既然我已经解释了 Ajax 文件 POST 的机制,那么您的插件可能已经在处理不能具有 2 级 XHR 功能的浏览器。嵌入插件时,请确保它位于 iFrame 中。如果您想在文件完全上传时通知主页,请在上传处理程序本身中嵌入 JavaScript 调用:
parent.doneuploading();
,其中 doneuploading 是在包含页面中定义的 JavaScript 函数。
还值得注意的是
enctype="multipart/form-data"
在表单标签中。