我的表单包含文本字段和文件。
我尝试提交表单并使用ajax上传文件。问题是当我在ajax文件(attractions-control.php)中打印(var_dump ($_POST['file']);)
文件的数据时,我什么都没得到:
array (size=2)
0 => string '' (length=0)
1 => string '' (length=0)
我该如何解决?
JS PART
e.preventDefault();
var formData = $(this).closest('form').serializeArray();
formData.push({name: 'act', value: 'edit'});
var file_data = $(this).parents("form").find('.multi').prop('files');
var filesArray = $(this).parents("form").find('.multi');
jQuery.each(filesArray, function(i, fileArray)
{
var files = fileArray.files;
var file;
formData.push({name: 'file[]', value: file});
});
$.ajax ({
type: 'POST',
url: 'ajax/attractions-control.php',
data: formData,
dataType : 'json',
async: false,
code : true
}).done(function(data)
{
}
HTML PART
<form id="attrac-form-<?PHP echo $mainIndex['id'] ?>" action="#" method="post" enctype="multipart/form-data" class="attrac-form">
<input type="text" name="title" >
<input type="file" name="file[]" class="multi">
<input type="file" name="file[]" class="multi">
<input type="file" name="file[]" class="multi">
<input class="attrac-submit" value="SEND" type="submit" >
</form>
答案 0 :(得分:2)
这对我有用
使用Javascript:
var form = $(this).closest('form')[0]; // derived from your code
// remove empty file inputs from form otherwise some browsers throw error
for (i = 0; i < form.elements.length; i++) {
if (form.elements[i].type == 'file') {
if (form.elements[i].value == '') {
form.elements[i].parentNode.removeChild(form.elements[i]);
}
}
}
var formData = new FormData(form);
$.ajax({
url : "file.php",
type: "POST",
data : formData,
dataType : "json",
contentType: false,
cache: false,
processData:false
})
.done(function(data) {
console.log(data);
});
PHP:
foreach ($_FILES as $key => $value) {
//handle your files
}
答案 1 :(得分:0)
使用FormData对象:
$.ajax ({
type: 'POST',
url: 'ajax/attractions-control.php',
data: new FormData($('form')[0]),
cache: false,
contentType: false,
processData: false,
async: false
})
这将向您发送此结构中的内容:
-----------------------------951861112078
Content-Disposition: form-data; name="sdfer"
0
-----------------------------951861112078
Content-Disposition: form-data; name="sfd"; filename=""
Content-Type: application/octet-stream
-----------------------------951861112078
Content-Disposition: form-data; name="zre"
0
-----------------------------951861112078
您可以通过PHP中的$ _FILES获取,并且所有表单都将包含所有输入类型文本,例如也可以使用$ _POST
访问