使用FormData对象

使用FormData对象

      利用FormData对象,可以使用一系列的键值对来模拟一个完整的表单,然后使用XMLHttpRequest对象来发送这个“表单”。


创建一个FormData对象

    我们可以先创建一个空的FormData对象,然后使用append()方法向该对象里添加字段,如下:

var formdata = new FormData();
 formdata.append('username','groucho');
 formdata.append('account',123456); //数字123456被立即转换成字符串‘123456’

 var oReq = new XMLHttpRequest();
 oReq.open('post','http://foo.com/submitform.php');
 oReq.send(formdata);

在该例子中,我们创建了一个名为formdata的FormData对象,该对象中包含了名为"username", "accountnum"的字段名,然后使用XMLHttpRequest的send()方法把这些数据发送了出去.


使用html表单来初始化一个FormData对象

可以用一个已有的<form>元素来初始化FormData对象,只需要把这个form元素作为参数传入FormData构造函数即可:

var newFormData = new FormData(someFormElement);

你还可以在已有的表单基础上,继续添加新的键值对,如下:

var formElement = document.getElementById('myFormElement');
var formdata = new FormData(formElement);
formdata.append('address','wuhan');
var oReq = new XMLHttpRequest();
oReq.open('post','http://foo.com/submitform.php');
oReq.send(formdata);

使用FormData对象发送文件

你还可以使用FormData来发送二进制文件,首先在HTML中要有一个包含了文件输入框的form元素:

<form enctype='multipart/form-data' method='post' name='fileinfo'>
    <label for="">your email address:</label>
    <input type="email" autocomplete='on' autofocus name='userid' placeholder='email' required maxlength='64'/><br>
    <label for="">custom file label:</label>
    <input type="text" name='filelabel' size='12' maxlength='32'><br>
    <label for="">file to stash:</label>
    <input type="file" name="file" required>
</form>

然后你就可以使用下面的代码来异步上传用户选择的文件:

function sendForm(){
    var oOutput = document.getElementById('output');
    var oData = new FormData(document.forms.namedItem('fileinfo'));

    oData.append('customField','this is some extra data');

    var oReq = new XMLHttpRequest();
    oReq.open('POST','stash.php',true);
    oReq.onload = function(oEvent){
        if(oReq.status == 200){
            oOutput.innerHTML = 'Uploaded!';
        }else{
            oOutput.innerHTML = 'Error '+oReq.status+' occurred uploading your file!<br/>';
        }
    };
    oReq.send(oData);
}

你还可以使用jQuery来发送FormData,但必须要正确的设置相关选项:

var fd = new FormData(document.getElementById("fileinfo"));
fd.append("CustomField", "This is some extra data");
$.ajax({
    url: "stash.php",
    type: "POST",
    data: fd,
    processData: false,  // 告诉jQuery不要去处理发送的数据
    contentType: false   // 告诉jQuery不要去设置Content-Type请求头
});



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值