jQuery验证文件上传

kat*_*son 4 validation ajax jquery

我一直试图从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;
}
Run Code Online (Sandbox Code Playgroud)

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

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

} catch (RuntimeException $e) {
    echo $e->getMessage();
}
Run Code Online (Sandbox Code Playgroud)

很多时候它甚至都没有打过这个PHP,因为该表单使用获取所有数据的url提交(通常在JQuery出错时发生)。当它正常工作时,我得到的输出是No File。

那么,如何将上传的文件与其余的表单数据一起发送,以便可以在PHP中进行处理?

谢谢

sta*_*943 5

你没有设定 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");
    }
});
Run Code Online (Sandbox Code Playgroud)