Я не могу получить правильный синтаксис для добавления файла (или нескольких файлов) при сканировании всех элементов с <form>
. Проблемная линия - data.append("PhotosToUpload", TheFile);
. Я пробовал много разных способов, но безуспешно.
Ниже приведен минимальный пример кода.
function SendData() {
var inputs = document.getElementById("MyForm").elements;
var xhr = new XMLHttpRequest();
xhr.open('post', 'TheHandler.php', true);
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && xhr.status == 200) {
document.getElementById("TheResponse").innerHTML = xhr.responseText;
}
}
var data = new FormData;
for (i = 0; i < inputs.length; i++) {
if (inputs[i].type === 'file') {
if (inputs[i].files.length != 0) {
for (a = 0; a < inputs[i].files.length; a++) {
var TheFile = inputs[i].files[a];
///////// HERE MY PROBLEM ////////////
data.append("PhotosToUpload", TheFile);
//For multiple files also I tried:
//data.append("PhotosToUpload[]", TheFile);
}
}
} else {
var TheName = inputs[i].name;
var TheValue = inputs[i].value;
data.append(TheName, TheValue);
}
}
xhr.send(data);
return false;
}
<form id = "MyForm" onsubmit = "event.preventDefault(); SendData();">
<div>Order<input type = "text" name = "Order" value = ""></div>
<div>SubOrder<input type = "text" name = "SubOrder" value = ""></div>
<div>Select photo (.jpg) to Upload: <input type = "file" name = "PhotoToUpload" id = "PhotoToUpload" multiple size = "3"></div>
<input type = "submit" name = "SendD" id = "SendD" value = "Send data" >
</form>
<div id = "TheResponse"></div>
Вы слишком усложняете. Вам вообще не нужно думать об отдельных элементах. Просто дайте объекту FormData вашу форму и позвольте ему найти в ней данные.
var form = document.getElementById("MyForm");
var data = new FormData(form);
xhr.send(data);
Обратите внимание, что PHP требует специальных соглашений об именах, когда у вас есть несколько значений для одного и того же имени поля.
name = "PhotoToUpload"
должен быть name = "PhotoToUpload[]"
@CMArg - PHP загружает файлы в $_FILES
, а не в $_POST
.
Я все еще новичок ... Вы правы, большое спасибо.
1) Невероятно просто добавлять элементы формы ...! 2) Я не могу получить файл. Если в
TheHandler.php
я написалforeach($_POST as $key=>$value){echo $key."-".$value."<br>";}
, печатаются только Order и SubOrder (т.е.PhotoToUpload
отсутствует).