我试图在js中发布表单数据:
我有这段代码:
var formData = new FormData();
formData.append("username", "Groucho");
formData.append("accountnum", 123456);
formData.append("afile", "2");
var xhr = new XMLHttpRequest();
xhr.open("POST", "http://xxxxx/xx.ashx",true);
xhr.send(formData);
MDN中的Formdata在IE(或未知)中不可用。
当我在 FF :
中尝试此操作时(我觉得很好......)。
当我尝试 IE :
时
什么是发布表单数据的解决方案(或以客观方式发布我的数据)CROSSBROWSER?
答案 0 :(得分:7)
我写了一个简单的包装器,你可以使用它在IE中发送FormData(它也不会搞乱webkit / gecko中的任何东西)。在尝试使用FormData之前,只需包含以下js:
var ieFormData = function ieFormData(){
if(window.FormData == undefined)
{
this.processData = true;
this.contentType = 'application/x-www-form-urlencoded';
this.append = function(name, value) {
this[name] = value == undefined ? "" : value;
return true;
}
}
else
{
var formdata = new FormData();
formdata.processData = false;
formdata.contentType = false;
return formdata;
}
}
现在只需将所有新的FormData()调用切换到新的ieFormData(),然后切换
processData: false,
contentType: false,
到
processData: formdata.processData,
contentType: formdata.contentType,
cache: false,
你已经准备好了。当然,这不允许你包含文件(你仍然需要iframe hack),但是它允许你在IE中模仿FormData。
答案 1 :(得分:3)
您没有说明您使用的是哪个版本的IE。 IE9或更低版本不支持formData对象。 IE10(http://caniuse.com/xhr2)
应支持XMLHTTPRequest2(包含formData对象)现在很难做到跨浏览器的AJAX文件上传。您可以尝试在Javascript中构建自己的表单标题/边界(请参阅此处的答案:XMLHttpRequest POST multipart/form-data)但是,就个人而言,我认为这不值得付出努力。