Javascript 在JS中通过XMLHttpRequest对象发布formdata?(跨浏览器)

Javascript 在JS中通过XMLHttpRequest对象发布formdata?(跨浏览器),javascript,post,cross-browser,xmlhttprequest,Javascript,Post,Cross Browser,Xmlhttprequest,我正在尝试在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)

我正在尝试在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);
Formdata在IE中不可用(或未知)

当我在FF中尝试此功能时:

(我觉得很好……)

当我尝试使用IE时:


发布表单数据(或我的数据,但以客观方式)交叉浏览器的解决方案是什么?

您没有说您使用的是哪个版本的IE。IE9或更低版本不支持formData对象。IE10()应支持XMLHTTPRequest2(包含formData对象)


跨浏览器AJAX文件上传现在很难做到。您可以尝试用Javascript构建自己的表单头/边界(请参见此处的答案:),但就个人而言,我认为不值得这么做。

我编写了一个简单的包装器,您可以使用它在IE中发送表单数据(而且它也不会弄乱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;
}
}

现在只需将所有new FormData()调用切换到new ieFormData(),然后切换

processData: false, 
contentType: false,


你们都准备好了。当然,这不允许您包含文件(您仍然需要iframe hack),但它允许您在IE中模拟FormData。

我有一个类似的问题,但我不确定如何解决这个问题,如果是var postedFile=document.getElementById(“文件”).files[0],我的代码会发生什么变化;var formElement=document.getElementById(“formID”);var form=新的FormData(formElement);form.append('postedFile',postedFile);open(“POST”、“/Admin/SaveQuestion/”,true);请求。发送(表格);我甚至不太担心发布的文件,我只想能够提交表单数据的其余部分
processData: formdata.processData,
contentType: formdata.contentType,
cache: false,