js提交表单数据时把form中的所有表格元素的name与value组成一个queryString,提交到后台。这用jQuery的方法来说,就是serialize.
$(form).serialize();在后台解析出对应的字符值。我的一篇博客 C#获取url参数值是这样实现的,这种在后端开发的时候要处理特殊的字符,也比较麻烦。而js内置的的Formdata提交的数据很好解析.
html中form标签添加属性enctype=”multipart/form-data"
jquery的ajax实现
$.ajax({
url: ‘/upload’,
type: ‘POST’,
cache: false,
data: new FormData($(form)),
processData: false,
contentType: false
}).done(function(res){
//
}).fail(function(res) {});
特别说明:
1. 标签添加enctype属性新值,表示在提交前不编码,默认的值会在表单提交前编码.
2.processData:false.是因为data的值是FormData对象,无需编码.
3.cache设置为false,上传时无需缓存
4.contentType设为false,无需指定编码格式.
FormData
对于form,非form元素,都是可以使用的,最关键的一点是:
var formdata1 = new FormData(form);
或者是
var formdata2 = new FormData();
formdata2.append(“username”,”admin”);
FormData实际上是把数据转换成了字符串.
ajax的操作都一样.
附加:
读jquery的api时我才发现自己曾经忽略了很多的细节。jquery把jsonp的实现也归到了ajax,实际上和ajax没关系。只是为了对外有统一的操作。jsonp跨域访问是利用了script标签可以跨域实现的。我之前一直糊里糊涂的用jquery的ajax,没有出问题真是奇怪。jquery内部容错很强大。