文件上传: FormData 对象来作为数据(serialize 方法得到的数据是一个字符串,其不支持二进制数据传输,因此无法上传文件)
文件上传Ajax:
var formdata = new FormData();//创建一个新的FormData对象
//Ajax中的 data 属性就是 formdata
$.each(files, function (i, file) {
formdata.append("files", file);
}); //使用append的方法为 formdata 对象赋值;所有文件都要放到同一个名字下面:如files
$.ajax({
type:'post',
url:'url',
contentType:false,
processData:false,
cache:false,
data:formdata,
success:function(res){
$.modal.alertError('success');
},
error: function (responseStr) {
$.modal.alertError("错误!");
}
})
请求后端Ajax:
$.ajax({
url: "url",
type: 'POST',
dataType: 'json',
data: dataIds,
cache: false,
success: function (responseStr) {
$.modal.alertSuccess(responseStr.msg);
},
error: function (responseStr) {
$.modal.alertError("错误!");
}
});
2.Ajax属性:cache、processData、contentType
- cache:缓存 (默认true)
当第一次发起请求后,会把后端返回结果以缓存的形式进行存储到浏览器中;当再次发起请求时,当cache值为true
,则不再发起请求,直接从缓存中读取,。
cache 的作用一般只在 get 请求中使用。
- processData:处理数据 (默认true)
代表以对象(obj)的形式上传的数据都会被转换为字符串的形式上传。因为上传文件需要二进制所以processData:false
- contentType:发送数据的格式 (默认true)
contentType 有个类似的属性 dataType :代表期望从后端收到的数据的格式,一般会有 json 、String等
而 contentType 则是与 dataType 相对应的:代表前端发送数据的格式.
默认值:application/x-www-form-urlencoded
代表的是 ajax 的 data 是以字符串的形式 如 id=001&password=root
使用这种传数据的格式,无法传输复杂的数据,比如多维数组、文件等
注意: 自己所传输的数据格式和Ajax的contentType格式是否一致,如果不一致就要想办法对数据进行转换 把contentType 改成 false 就会改掉之前默认的数据格式,在上传文件时就不会报错了。