使用jQuery Ajax上传文件

我已经多次搜索如何使用Ajax从表单上传文件,并发现xhr2应该能够做到。 然而,我已经尝试使用FormData对象,但它不起作用。

这是一个简单的html表单

   File Upload   

这里是’post.php’文件,当称为’老式’方式时它可以正常工作:

  0) die('Error ' . $_FILES['file']['error']); if(empty($_FILES['img']['name'])) die('No file sent.'); $tmp = $_FILES['img']['tmp_name']; if(is_uploaded_file($tmp)) { if(!move_uploaded_file($tmp, 'img.png')) echo 'error !'; } else echo 'Upload failed !'; ?> 

这里是’upload.js’

 $(function() { $('#form').submit(function(e) { e.preventDefault(); data = new FormData($('#form')); console.log('Submitting'); $.ajax({ type: 'POST', url: 'post.php', data: data, cache: false, contentType: false, processData: false }).done(function(data) { console.log(data); }).fail(function(jqXHR,status, errorThrown) { console.log(errorThrown); console.log(jqXHR.responseText); console.log(jqXHR.status); }); }); }); 

你知道它为什么不起作用吗? 控制台返回“No file sent”。

非常感谢 !

尝试替换代码:

 data = new FormData($('#form')); 

有了这个:

 data = new FormData($('#form')[0]); 

从jQuery数组中获取第一个DOM元素。