使用AJAX发送文件数组

时间:2017-08-06 10:41:09

标签: javascript jquery ajax

所以我有这个包含一些图像的数组:

var images = [image1, image2, image3]

图像采用文件形式。 如何使用AJAX将这些图像发送到php文件

以下代码不起作用:

$.ajax({
    url: 'PHP/posts.php',
    type: 'post',
    data: {data: images},
    success: function(data) {
      alert(data);
      location.reload();
    }
  });

我的HTML:

<div id="newPostFile">
    <label for="newPostFiles"><i class="fa fa-file-text-o" id="newPostFileIcon" aria-hidden="true"></i></label>
    <input type="file" name="newPostFiles" id="newPostFiles">
</div>

所以我基本上想要实现的是我逐个选择一个文件,它不断将文件添加到数组中,当我点击提交时,它会立即上传所有文件。 我不使用倍数的原因是因为我遇到的其他问题拖延了我

4 个答案:

答案 0 :(得分:3)

您必须将文件作为formData

发送
var images = [image1, image2, image3]
var data   = new FormData();

images.forEach(function(image, i) {
    data.append('image_' + i, image);
});

$.ajax({
    url: 'PHP/posts.php',
    type: 'post',
    data: data,
    contentType: false,
    processData: false,
    success: function(data) {
       console.log(data);
       location.reload();
    }
});

但是当你正在重新加载页面时,为什么要使用ajax?

答案 1 :(得分:0)

确保PHP / posts.php函数包含与数据值相同的参数

答案 2 :(得分:0)

使用FormData对象使用ajax发送文件。new FormData($('#your_form_id')[0])自动在FormData对象中附加所有表单输入,我们可以手动formData.append('file1',file1);完成

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script>
let formData = new FormData($('#your_form_id')[0]);
    $.ajax({
        url: 'PHP/posts.php',
        type: 'POST',
        data: formData,
        dataType:'json',
        processData: false,
        contentType: false,
        success: function(response) {
            console.log(response);
            location.reload();
        },
        error: function() {
            console.log('fail');
        }
    });
</script>

答案 3 :(得分:0)

您可以将JSON对象传递给PHP,这将是方便的解决方案

var data ={'image1':image1,'image2':image2};

您可以将此对象传递给php代码,然后解析它:

将对象作为字符串传递:

AJAX电话:

$.ajax({
    type    : 'POST',
    url     : 'PHP/posts.php',
    data    : {result:JSON.stringify(data)},
    success : function(response) {
        alert(response);
    }    
});

您可以将传递给result.php的数据处理为:

$data    = $_POST["result"];
$data    = json_decode("$data", true);

//just echo an item in the array
echo "image1 : ".$data["image1"];

另一种选择是在发送之前序列化数组,或者使用array.join将其转换为逗号分隔的字符串,然后在posts.php上解析/拆分

 array.join(",")