本日在做项目标时候涉及到了<a href="/a26325a6492bfa55747e75e3f71fb28a.html">ajax上传文件流的问题,由于是移动端两个页面的两个表单利用同一个ajax地点举办上传数据给靠山,数据中涉及到了差异范例的input,个中存在了file范例的input,导致无法利用表单序列化直接传输数据。
只存在通报一般的参数时,可以利用$("#表单id").serialize()对form表单序列化,从而将form表单中的所有参数通报随处事端。而上传文件的文件流时无法被序列化并通报的,因此利用了FormData的工具举办文件上传。详细formdata的利用可以拜见:官网
//html如下 //form1 <form method="post" action=""> <div> <div> <i></i> </div> <div> <input type="text" placeholder="店肆名称"> </div> </div> <div> <div> <i></i> </div> <div> <input type="text" placeholder="本人姓名"> </div> </div> </form> //form2 <form action="" method="post"> <input/> <input/> <input/> </form>
$("#btn-register-confirm").click(function () { //upRegister()是表单验证,这就没有给出了 if (upRegister()){ var form=$("#registerForm2")[0];//第二个表单的id,留意[0]不能遗漏 var fd=new FormData(form); //由于靠山吸收的数据只能是序列化之后的样子,所以将第一个表单的字段存放在cookie中。通过fd.append()以键值对形式存放 fd.append("shopName",$.cookie("shopName")); fd.append("name",$.cookie("name")); $.ajax({ type:'post', async: false, url:"url", data:fd, processData:false,//因为data值是FormData工具,不需要对数据做处理惩罚。 contentType:false,//因为是由<form>表单结构的FormData工具,所以这里配置为false。 success:function(data){ if (data.resultCode=="0"){ webToast("乐成注册!"); console.log("乐成注册"); } }, error:function(){ console.log("注册失败"); } }) } });
以上就实现了ajax上传文件流及一般参数。这主要涉及到2方面:
差异页面的差异表单要放在同一个按钮触发同一个ajax传输随处事器,利用cookie先存储一个表单数据,这大概会贫苦些而且不安详,但今朝我也只想到了这种方法,假如有更好的接待增补;
ajax上传文件流,要留意var fd=new FormData($("#表单id")[0]);[0]千万要带上,我就是因为这个弄了一成天才好。processData:false, contentType:false,尚有ajax的这两个参数要写为false,详细原因上面已经写了。