使用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元素。