通过FormData对象可以组装一组用 XMLHttpRequest发送请求的键/值对。它可以更灵活方便的发送表单数据,因为可以独立于表单使用。如果你把表单的编码类型设置为multipart/form-data ,则通过FormData传输的数据格式和表单通过submit() 方法传输的数据格式相同
前端文件-Jquery版本:
<form id="form" enctype="multipart/form-data" method="post">
<input type="text" name="desc" placeholder="文件名称"/><br/>
<input type="file" name="file" placeholder="文件"/>
<input type="button" id="submit" value="文件上传"/>
</form>
<script>
$('#submit').click(function () {
//Jquery对象转换为dom对象
var $form = $('#form');
var domForm = $form['0'];
//构建formData对象
var formData = new FormData(domForm);
formData.append('diycontent','我是自定义数据');
//异步上传文件
$.ajax({
url : 'file.php',
type : 'POST',
data : formData,
// 告诉jQuery不要去处理发送的数据
processData : false,
// 告诉jQuery不要去设置Content-Type请求头, jquery 会自动设置为multipart/form-data
contentType : false,
beforeSend:function(){
console.log('开始上传咯');
},
success : function(response) {
console.log(response)
},
error : function(response) {
console.log(response)
}
});
});
</script>
前端文件-原生Javacript版本:
<form enctype="multipart/form-data" method="post" onsubmit="return upload()">
<input type="text" name="desc" placeholder="文件名称" /><br />
<input type="file" name="file" placeholder="文件" />
<input type="submit" value="文件上传" />
</form>
<script type="text/javascript">
var upload=function(){
//获取表单对象
form=document.forms[0];
//构建formData对象
formdata=new FormData(form);
formdata.append('diycontent','我是自定义数据');
//Ajax异步上传
var httper=new XMLHttpRequest();
httper.open('POST','file.php');
httper.onload=function(oEvent){
if(httper.status==200){
console.log('success');
console.log(httper.responseText);
}
else{
console.log('error');
}
}
httper.send(formdata);
return false;
}
</script>
后端文件-PHP版本:
<?php
//文件上传
if(move_uploaded_file($_FILES['file']['tmp_name'], $_FILES["file"]["name"])){
//记录日志
$str='文件名:'.$_FILES['file']['tmp_name'].'--文件介绍:'.$_POST['desc'].'--Formdata追加的字段值:'.$_POST['diycontent'];
file_put_contents('log/'.time().'.txt',$str);
//让前端控制台输出看
echo $str;
}
附件下载:
离线缓存的开启实例使用apache设置 1.apache配置文件搜索Addtype,我的addtype已经存在项目,如下 AddType application/x-compress .Z AddType application/x-gz...
<!doctype html> <html> <head> <meta charset="utf-8"> <title>无标题文档</title> </head> ...
维护老项目中客户提到一个页面中有6个表单以上,导致每次保存一个其他的数据全部丢失,自己比较懒没有全部更换为ajax.用户每次输入完成或者选择完成记录cookie,每次提交后加载页面完成初始化cookie即可。以下代码取自w3school比较完善,之前在其他博客使用的经常出现bug,这个比较推荐使用:...
//构造函数 function Box(name,age){ this.name=name; this.age=age; this.run=function(){ return this.name+'--'+this.age; } } var&nbs...
//我们创建每个函数默认都有一个prototype(原型)属性,这个属性是一个对象 //1.我是普通的构造方法,我的属性叫实例属性,我的方法叫实例方法 /* function Box(name,age){ this.name=name; this.age=age; this.run...
HTML5 服务器发送事件(server-sent event)允许网页获得来自服务器的更新。通过官网的介绍可以看出是接收服务器发送数据,千万不能和ajax混淆,网上大片博文的介绍对其解读是错误的,导致让我差点觉得这个事件很鸡肋。先看通用案例:html5:<script type=&...