IE和FireFox 对FORM enctype属性的认识存在差异,一般来说对于动态创建的form,如果因为要上传文件的原因很自然的会使用类似如下的代码:
Code
1 //create form
2 this.form = document.createElement("FORM");
3 this.form.id = "jasonUploadForm";
4 this.form.name = "jasonUploadForm";
5 this.form.method = "post";
6 this.form.action = actionTarget;
7 this.form.enctype = "multipart/form-data";
8 document.body.appendChild(this.form);
这段代码表面上看没有什么问题,但在IE中却还是无法改变FORM的编码格式,
也就是说传到服务端的ContentType仍然是:"application/x-www-form-urlencoded”.
但在FireFox中却能正确识别,也就能正常上传文件。
那如何才能使IE和FireFox都能正确按照我们的要求编码FORM 数据呢?找了N久终于找到了解决方案,就是直接指定encoding就行了,且看如下正确的代码:
Code
1 //create form
2 this.form = document.createElement("FORM");
3 this.form.id = "jasonUploadForm";
4 this.form.name = "jasonUploadForm";
5 this.form.method = "post";
6 this.form.action = actionTarget;
7
8 //this.form.setAttribute("enctype", "multipart/form-data");
9 this.form.encoding = "multipart/form-data";
10
11 document.body.appendChild(this.form);
希望对遇到类似问题的朋友有所帮助! (注:代码中滤去了上下文代码。)