在ie9中上传文件出现问题,大多数的上传文件都采用new Formdata创建添加文件,在IE9中不支持Formdata对象操作,ie10是支持的。所以只能使用表单提交的方式进行操作。
<form id="form" action="/upload" onsubmit="return addevent(event) enctype="multipart/form-data"">
<input id="fid" type="file" onchange="uploadFile">
<button>提交</button>
</form>
<div id="sub">点我提交</div>
注意在ie9中一定要是手动触发input选择文件,如果用其他事件触发input的点击事件,选取完文件后,input中是没有文件对象的,此时提交表单为空内容。
表单提交后防止页面刷新,使用jquery-form插件来帮助我们完成提交。原理就是提交时创建一个iframe视口,form的target属性指向iframe的id值,这样就实现了在iframe中提交,然后从iframe的内部把返回值取到。
除了ie9以下,其他均可以这种方式上传
<body>
<input type="file" onchange="changeFile(event)">
</body>
<script>
function changeFile(e) {
var fileObj=e.target.files[0]
uploadFile(fileObj)
}
function uploadFile(fileObj){
var fileObj=new FormData()
fileObj.append('file',fileObj)
$.ajax({
url:'/text',
data:fileObj,
dataType:json,
async:true,
cache:false,
processData:false, //参数序列化
contentType:false, //必须
success:function(){ }
})
}
</script>