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, время: 02:54. |