使用ajax实现文件上传浏览器控制台报异常项:jquery-3.2.1.min.js:4 Uncaught TypeError: Illegal invocation
原因:1、请求类型有误,如:post请求,但在后台设置的是get请求
2、参数有误,如:没有传参,或是参数对应不上去
在使用ajax上传文件的时候:
举例:
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>上传</title> 6 <script type="text/javascript" src="/jquery-3.2.1.min.js"></script> 7 <script type="text/javascript"> 8 $(function () { 9 $("#uploadAdd").click(function () { 10 $("#formUpload").append("<input type='file' name='multipartFiles' /><br/>") 11 }); 12 13 $("#uploadButton").click(function () { 14 // alert(new FormData($("#formUpload")[0])); 15 $.ajax({ 16 url:"doUpload", 17 type:"POST", 18 // data:$("#formUpload").serialize(), 19 data:new FormData($("#formUpload")[0]), 20 //不要设置content-type请求头 21 contentType:false, 22 //不要处理发送的数据 23 processData:false, 24 success:function (msg) { 25 if(msg!=null) { 26 var msgs= msg.split(";"); 27 for(var i=0;i<msgs.length;i++){ 28 $("#divUpdate").append("<img src=" + msgs[i] + " alt='头像' />"); 29 } 30 } 31 } 32 33 }) 34 }) 35 }) 36 37 </script> 38 </head> 39 <body> 40 41 <form id="formUpload"> 42 头像上传:<input type="file" name="multipartFiles"/><br/> 43 </form> 44 <input type="button" value="SUBMIT" id="uploadButton"/> 45 <input type="button" value="uploadAdd" id="uploadAdd"/> 46 47 <div id="divUpdate"></div> 48 </body> 49 </html>
因为要传递的参数是文件类型,所以要进行表单序列化,有两种方式;
1 data:$("#formUpload").serialize(), 2 或者:data:new FormData($("#formUpload")[0]),
并且结合使用:
1 告诉jQuery不要去处理发送的请求头 2 3 processData:false, 4 5 告诉jQuery不要去设置Content-Type请求头 6 7 contentType:false,