html部分:
文件上传
后端php部分:ajax.php
js部分,用js上传的时候是成功的,但用jquery的时候出现了两种错误:
一种是用$.ajax方法:
$(function(){ $(".sub").click(function(){ var fd=new FormData($("#up")); $.ajax({ url: 'ajax.php' , type: 'POST', data: fd, async: false, cache: false, contentType: false, processData: false, success: function (returndata) { alert(returndata); }, error: function (returndata) { alert(returndata); } }); }) })
报错说找不到$_FILES里的pic,为什么呢?
补充:这个地方搞定了,var fd=new FormData($("#up"));需要写成:
var fd=new FormData($("#up")[0]);
具体可见:http://segmentfault.com/q/101...
和 http://segmentfault.com/a/119...
用$.post方法的时候:
$.post("ajax.php",fd,function(data){ console.log(data); })
报错:Uncaught TypeError: Illegal invocation
这又是为什么呢?
(jquery是1.7.1版本的)
2017.5.5 补充:
直接用$.post是不行的,但如果说懒得用$.ajax的话,可以用FileReader读取文件的内容,为base64的数据,就可以直接用$.post来发给后端了,当然后端的处理方式会不太一样。
设置不对。
var data = new FormData(); data.append('file', $('input[type=file]')[0].files[0]); $.ajax({ url: 'ajax.php', data: data, processData: false, type: 'POST' contentType: 'multipart/form-data', mimeType: 'multipart/form-data', success: function (data) { alert(data); } });
Ajax是不能上传附件的,如果需要上传附件请参考使用jQuery form插件
ajax只能传输文本流,不能运输二进制的文件。
可参考我写的关于FormData不刷新上传文件
ajax不能上传文件,还有form上传文件的enctype属性是要有的
contentType: false, processData: false,