使用ajax提交文件数

时间:2018-06-06 14:34:03

标签: php jquery

我的表单包含文本字段和文件。

我尝试提交表单并使用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> 

2 个答案:

答案 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

访问