Ajax的方式进行请求:
$.ajax({
url : "http://localhost:8080/STS/rest/user",
type : "POST",
data : $( '#postForm').serialize(),
success : function(data) {
$( '#serverResponse').html(data);
}
});
通常我们提交(使用submit button)时,会把form中的所有表格元素的name与value组成一个queryString,提交到后台。这用jQuery的方法来说,就是serialize。
通过 $( '#postForm' ).serialize() 可以对form表单进行序列化,从而将form表单中的所有参数传递到服务端。 但是上述方式,只能传递一般的参数, 上传文件的文件流是无法被序列化并传递的。 不过如今主流浏览器都开始支持一个叫做FormData的对象,有了这个FormData,我们就可以轻松地使用Ajax方式进行文件 上传 了
1. 客户端HTML代码:
<script src="jquery-3.3.1.js"></script> <form id='forms'> <input type="file" name="files" id="files" /> </form> <script> $(function($){ $("#files").change(function(){ var url = "files.php"; //方法1: var file_obj = document.getElementById('files').files[0]; var formData = new FormData(); formData.append('files',file_obj); /* 方法 2: var formData = new FormData($("#forms")[0]); //FormData 可以把post数据改成流传输。 formData.append("username", "zhuangzi"); */
/*
方法 3:
得到表单流数据对象 var formData=new FormData($("form")[0]);
需要额外添加数据:
formData.append("username", "zhuangzi"); */
//向formData里增加数据 $.ajax({ url: url, type: 'POST', data: formData, async: false, cache: false, contentType: false, processData: false, success: function () { //比如这里的可以把上传的图片url及上传文件名返回, //然后在这里显示预览功能,并隐藏保存文件名 //方便与其它的表单字段一起上传 }, error: function () { } }); }) }) </script>这里要注意几点: processData设置为false。因为data值是FormData对象,不需要对数据做处理。