我一直试图从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>
由于
答案 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");
}
});