safari ajax formdata,JSLite.io 使用FormData ajax上传文件

XMLHttpRequest Level 2添加了一个新的接口FormData。利用FormData对象,我们可以通过js用一些键值对来模拟一系列表单控件,我们还可以使用XMLHttpRequest的send()方法来异步的提交这个"表单"。比起普通的ajax,使用FormData的最大优点就是我们可以异步上传一个二进制文件(图片、压缩文件等)。

上传文件例子

原生写法

html

jsfunction sendForm(){

var fr = document.getElementById("form1")

var fd = new FormData(fr);//使用HTML表单来初始化一个FormData对象

fd.append("file", document.getElementById('file').files[0]);

var xhr = new window.XMLHttpRequest();

xhr.upload.addEventListener("progress", uploadProgress, false);

xhr.addEventListener("load", uploadComplete, false);

xhr.addEventListener("error", uploadFailed, false);

xhr.addEventListener("abort", uploadCanceled, false);

console.log(fd)

xhr.open("POST", "/session/sendImg?subID=3&subsID=2&ssID=163");

xhr.send(fd);

}

//+ uploadComplete 上传结束函数

//+ uploadFailed 上传错误函数

//+ uploadCanceled 终止函数

JSLite 方法

使用JSLite来发送FormData,但必须要正确的设置相关选项(jQuery是一样的玩儿)

jsfunction sendForm(){

var fd = new FormData();

fd.append("file",$('#file')[0].files[0]);

fd.append("name",$('#name').val());

$.ajax({

type:'POST',

dataType:'text',

processData: false, // 告诉JSLite不要去处理发送的数据

contentType: false, // 告诉JSLite不要去设置Content-Type请求头

data:fd,

url:'/session/sendImg?subID=3&subsID=2&ssID=163',

success:function(data){

console.log('success:',data)

},

error:function(d){

console.log('error:',d)

}

})

}

append()

给当前FormData对象添加一个键/值对

void append(DOMString name, Blob value, optional DOMString filename);

void append(DOMString name, DOMString value);

MDN 参考地址

浏览器兼容性

Feature

Chrome

Firefox (Gecko)

Internet Explorer

Opera

Safari

Basic support

7+

4.0 (2.0)

10+

12+

5+

支持filename参数 (Yes)

22.0

(22.0)

?

?

?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值