今天写项目有个需求,需要异步将表单传到服务器,本来$post一下的事,但是因为表单中含有文件,选择的图片,结果搞了一下午,试了几个插件,像jQuery.form.js,都没用,最后多方查找,看到JS中新增的类FormData可以实现上传,博主抱着试试看的态度,用了一下,可能因为上传图片还有点卡,不过还是成功了,值得高兴,以后这类问题就这样解决了。
--------------------------------------------------------------------------------华丽的分隔线-----------------------------------------------------------------------------------------------------------------------------------------
function exeAlterSchinfo(){
alert("开始进行异步处理");
var formData=new FormData($("#alterSchinfoFm")[0]);
$.ajax({
url: 'cmAdmin_exeAlterSchinfo.action' ,
type: 'POST',
data: formData,
async: true,
cache: false,
contentType: false,
processData: false,
success: function (returndata) {
alert(returndata);
},
error: function (returndata) {
alert(returndata);
}
});
alterSchinfoFm是表单的id,至于取[0],stackoverflow上的解释是:
this code returns a jQuery object($('form')
) and pass a HTML element to FormData (get(0)
).
then in ajax request: data: new FormData(form),
不然会报
Error in Sending Form file with form using AJAX错误
contentType和processData也是需要的,否则会报:
'append' called on an object that does not implement interface FormData
不明白为啥报这个错,不填这两个属性,但是解决了就好了。
参考网址:
1.
FormDataApi
2.
参考的博客
3.
错误1
4.
错误2