formData не работает multiple values
Подскажите, никак не пойму почему не работает multiple values
const formData = new FormData();
this.files.forEach(file => {
formData.append('images[]', file, file.name);
});
console.log(formData.getAll('images'))
показывает пустой массив если убрать квадратные скобки
formData.append('images', file, file.name);
то работает, естественно один элемент загружается |
|
я вроде так и делаю
Цитата:
|
Просто уберите третий параметр.
|
Вложений: 1
бесполезно
|
Что ошибок не показывает? Будет работать, заменить forEach на for или for ... of. Да и какая надобность именно в apend, почему не просто отдать форму FormData() или нет ее?
|
Вложений: 1
В том то и дело, никаких ошибок, все чисто. Формы нету, просто инпут. Поменял на for
for(let file of this.files){
console.log(file)
formData.append('images[]',file);
}
console.log(formData.getAll('images'))
на входе есть, на выходе шиш |
На сервере РНР (если судить по ключу передаваемому, то да)?
|
Да, back - php front - vue
|
Тогда сохранить под любым именем и запустить:
<?
if($_FILES) exit(print_r($_FILES, 1))
?>
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="content-type" content="text/html" />
<script type="text/javascript">
function send(f) {
var xhr = new XMLHttpRequest(),
data = new FormData();
for(var i of f.files) data.append('images[]', i); //проблемы с поддержкой
xhr.open('POST', location);
xhr.onload = function() {
if (xhr.status == 200) {
alert(xhr.responseText)
}
}
xhr.send(data);
}
</script>
</head>
<body>
<input type="file" onchange="send(this)" multiple="" />
</body>
</html>
Возвращает сервер информацию о загруженном? Следовательно у вас есть нечто с чем нужно разбираться. |
работает, вот я и пытаюсь разобраться
Цитата:
|
Сеть у себя проверяйте - запрос с клиента есть, сервер отвечает? А если отвечает, то какие заголовки он принимает, может ваш Ajax банально отправляет application/x-www-form-urlencoded?
|
так console.log где я ответ смотрю до ajax, до сервера на этот момент даже не доходит еще.
Да и сервер ответ отдает нормально, если квадратные скобки убрать ответ есть и в консоле, и от срвера Я вот думаю, vue крутится на vue cli (Standard Tooling for Vue.js Development ) может он чета мутит... С другой стороны этоже броузер код выполняет, на тот момент vue cli уже касательства не имеет |
Вложений: 1
если скобки убираю, работает
formData.append('images',file);
|
Цитата:
|
Цитата:
|
напал на след, добавил в ваш код console.log и тоже фиг
function send(f) {
var xhr = new XMLHttpRequest(),
data = new FormData();
for(var i of f.files) data.append('images[]', i); //проблемы с поддержкой
console.log(data.getAll('images'))
xhr.open('POST', location);
xhr.onload = function() {
if (xhr.status == 200) {
alert(xhr.responseText)
}
}
xhr.send(data);
}
|
пардон, ответ от сервера хоть и 200 но пустой
скобки отсюда data.append('images[] <- эти |
То есть этот код вставлен на страницу, в которой проблемы?
|
Вложений: 1
нет, этот код в пустой странице, если открыть файл выскакивает
print_r($_FILES, 1), все показывает но при этом в консоле пустой массив, как и у меня for(var i of f.files) data.append('images[]', i); //проблемы с поддержкой console.log(data.getAll('images')) это значит что может оно и работает, но я этого просто не вижу, консоль не показывает, и ответ сервера пустой буду думать |
Вот работа файла - https://screenshots.firefox.com/RlbL4Np74EwTS1bC/null Как видно выбрано два и сервер отдает информацию о двух принятых. А коли у вас только один из всех или вообще не принимает, то смотрите настройки своего сервера - ограничения на объем POST данных и одного файла.
|
Цитата:
|
Цитата:
спасибо, теперь вижу в консоле, пошел дальше искать, печему сервер пустой массив видит, но это уже легче. |
Цитата:
|
Это отсюда
а а сервер не видел потому что сделал копипаст запроса, а поменять get на post забыл. Теперь все работает. Когда однозначно стало ясно что проблема на стороне сервера найти причину уже не составило труда |
| Часовой пояс GMT +3, время: 18:59. |