摘要:现在有一个场景,一个form表单里面,除了普通的数据外,还有文件上传input[type=file],怎么可以ajax异步提交呢?如果采用表单serialize()序列化用Ajax的方式提交,也无法把...
现在有一个场景,一个form表单里面,除了普通的数据外,还有文件上传input[type=file],怎么可以ajax异步提交呢?
如果采用表单serialize()序列化用Ajax的方式提交,也无法把上传文件的文件流进行序列化,所以不行,那么现在可以用到FormData对象了。
new FormData该对象不仅仅可以序列化文件,一样可以用作表单数据的序列化,(就是说包含了serialize()的功能)
首先看一下formData的基本用法:FormData对象,可以把所有表单元素的name与value组成一个queryString,提交到后台。只需要把 form 表单作为参数传入 FormData 构造函数即可。
FormData 上传文件实例:
前端代码:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>test</title> <script src="js/jquery.js"></script> </head> <body> <form action="" method="post" id="myform" onsubmit="return dosub()"> <p>name:<input type="text" name="name" /></p> <p>gender:<input type="radio" name="gender" value="1" />male <input type="radio" name="gender" value="2" />female</p> <p>number:<input type="text" name="number" /></p> <p>photo:<input type="file" name="photo" id="photo"></p> <p><input type="submit" value="保存" /></p> </form> <script> //ajax提交 function dosub(){ var form=document.getElementById("myform"); var data = new FormData(form); $.ajax({ type: 'POST', url: 'server.php', data: data, dataType: "json", processData: false, // 告诉jQuery不要去处理发送的数据 contentType: false, // 告诉jQuery不要去设置Content-Type请求头 success: function (msg) { if(msg.status == 1){ alert('上传成功'); }else{ alert('上传失败'); } } }) return false; } </script> </body> </html>
PHP代码:
<?php //这里只简单打印一下接收到的数据,并未做上传功能 var_dump($_POST); var_dump($_FILES);
PHP打印结果:
array(3) { ["name"]=> string(6) "yzmcms" ["gender"]=> string(1) "1" ["number"]=> string(3) "100" } array(1) { ["photo"]=> array(5) { ["name"]=> string(6) "33.jpg" ["type"]=> string(10) "image/jpeg" ["tmp_name"]=> string(51) "C:\Users\yuanzhimeng\AppData\Local\Temp\php7414.tmp" ["error"]=> int(0) ["size"]=> int(1085354) } }
网友评论:
升达的撒打
2019-02-15 17:15:44 回复