使用ajax将多个文件附件发送到php文件

时间:2016-06-09 11:59:04

标签: javascript php jquery ajax forms

我在表单中有以下html代码:

<input type="file" id="attachments" name="attachments" multiple>

我已经有了一个javascript函数,它使用ajax处理表单的onsubmit但不处理上传的文件。

这是我的javascript函数的一部分,它将数据发送到所需的php文件:

var to_users = $("#to_users").val();            
var title = $("#title").val();
var content = $("#content").val();

var data = {
    to_users:to_users,
    title:title,
    content:content
}

$.ajax({url: "submit.php", type:"POST" , data:data ,success: function(result){

    // does something
}});

有许多关于使用ajax和php的附件的在线教程和问题,但没有一个处理多个文件。 我的问题是:我需要添加到这个函数,以便将附加的文件发送到php文件?我应该在php文件中写什么来处理它收到的文件?

2 个答案:

答案 0 :(得分:4)

要上传多张图片,请使用数组:

<input type="file" id="attachments" name="attachments[]" multiple>

并使用ajax发送表单数据:

 var formData = new FormData(this);
$.ajax({
    url: "submit.php",
    type: "POST",
    data: formData,
    processData: false,
    contentType: false,
    success: function(result){

    // do something
   }
});

在php文件中使用循环(我推荐foreach)来保存所有附件。

foreach($_FILES['attachments']['name'] as $key=>$val){

// do whatever you want

}

答案 1 :(得分:3)

有很多问题几乎都是重复的,但它们都会受到创建FormData对象,然后逐个添加字段......这无法显示如何处理多个文件输入(并且是这个问题冗长而脆弱的方法。)

只需将form元素作为参数传递给FormData对象。

var formData = new FormData(document.querySelector("form"));
$.ajax({
    url: "submit.php",
    type: "POST",
    data: formData,
    processData: false,
    contentType: false
});