JQuery通过文件上传验证

时间:2015-10-05 21:48:18

标签: jquery ajax validation

我一直试图从ajax到php获取文件一段时间没有成功。所以我使用JQuery Validate

我有一个包含多个输入(名称,电子邮件等)的表单,一个输入是文件类型。我执行所有验证,甚至在文件上,这一切都顺利进行。然后我来到submitHandler函数。从我读过的内容来看,通过ajax发送文件会有问题,但现在可以了。所以我在尝试

submitHandler: function (form) {
    var $form    = form,
        formData = new FormData(),
        params   = $form.serializeArray(),
        files    = $form.find('[name="fileOne"]')[0].files;

    $.each(files, function(i, file) {
        formData.append('uploadedFiles-' + i, file);
    });

    $.each(params, function(i, val) {
        formData.append(val.name, val.value);
    });

    $.ajax({
        type: "POST",
        url: "php/process.php",
        dataType: "json",
        data: formData
    }).done(function (response) {
        if (!response.success) {
            alert("Failed");
            console.log(response.errors);
        }
        else {
            alert("Worked");
        }
    });
    return false;
}

所以我希望得到我的文件(fileOne)并将其附加到我的表单数据中。但是,在PHP中,我现在只是这样做

try {
    if(isset($_FILES['fileOne'])){
        var_dump("IN");
    }
    else {
        var_dump("NO FILE");
    }

} catch (RuntimeException $e) {
    echo $e->getMessage();
}

很多时候它甚至没有命中这个PHP,因为表单提交了url获取所有数据(这通常发生在JQuery有错误时)。当我确实工作时,我得到输出No File。

那么如何将我上传的文件与其余的表单数据一起发送,以便我可以用PHP处理它?<​​/ p>

由于

1 个答案:

答案 0 :(得分:4)

You did not set contentType: false, processData: false

 $.ajax({
    type: "POST",
    url: "php/process.php",
    dataType: "json",
    data: formData,
    mimeType: "multipart/form-data",
    contentType: false,
    processData: false
}).done(function (response) {
    if (!response.success) {
        alert("Failed");
        console.log(response.errors);
    }
    else {
        alert("Worked");
    }
});