Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 21.10.2019, 12:09
Аспирант
Отправить личное сообщение для Alehana Посмотреть профиль Найти все сообщения от Alehana
 
Регистрация: 22.01.2019
Сообщений: 61

Как передать множество объектов.
На странице есть множество элементом класса votetoredact. Каждый из них содержит дочерний элемент типа file класса newfotoworker.
При нажатии на кнопку but собираются все данные из всех файлов, куда они загружены и передаются в обработчик.

var fd1=new FormData;
$(".votnoviiworker").click(function () {
 if ($(this).children(".newfotoworker").val()!=""){fd1.append('img', $(this).children(".newfotoworker").prop('files')[0]);}
                            });
                $.ajax({
                                 url: 'Файл обработчик',
                                 data:fd1,
                                 processData: false,
                                 contentType: false,
                                 type: 'POST',
                                 success: function (result) {
                                     $(".mainekran").html(result);
                                 }
                             });
                        }
                    });

В файле обработчике
$img=$_FILES["img"];
var_dump($img);

В итоге в mainekran выводится данные лишь по последнему записанному файлу. Как их всех правильно собрать и передать ?
Ответить с цитированием
  #2 (permalink)  
Старый 21.10.2019, 12:22
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

$_FILES, это ассоциативный массив, ключами которого будут имена полей формы. А массив не может иметь двух одинаковых ключей, и при помещении в него одинаковых значение ключа будет перезаписываться. Поэтому вы и получаете только последний. Чтобы этого не происходило, для РНР нужно именовать поля как элементы массива - name="img[]". В противном случае принимайте сырые данные и сами ими манипулируйте.
Ответить с цитированием
  #3 (permalink)  
Старый 24.10.2019, 10:00
Аспирант
Отправить личное сообщение для Alehana Посмотреть профиль Найти все сообщения от Alehana
 
Регистрация: 22.01.2019
Сообщений: 61

А как получить сам массив с разными именами (например, если у меня image0 и image1) ?
Ответить с цитированием
  #4 (permalink)  
Старый 24.10.2019, 10:10
Аспирант
Отправить личное сообщение для Alehana Посмотреть профиль Найти все сообщения от Alehana
 
Регистрация: 22.01.2019
Сообщений: 61

Допустим, я переделал код в виде

var fd1=new FormData;
  var numbermass=0;
	$(".votnoviiworker").click(function () {
 if ($(this).children(".newfotoworker").val()!=""){fd1.append('img'+numbermass, $(this).children(".newfotoworker").prop('files')[0]);numbermass++}
	                            });
	                $.ajax({
	                                 url: 'Файл обработчик',
	                                 data:fd1,
	                                 processData: false,
	                                 contentType: false,
	                                 type: 'POST',
	                                 success: function (result) {
	                                     $(".mainekran").html(result);
	                                 }
	                             });
	                        }
	                    });

Я не смогу в php сделать
$img1=$_FILES["img1"];
$img2=$_FILES["img2"];

Т.к количество передаваемых файлов заранее не известно. Как мне там получать их из формы fd1 ?

Последний раз редактировалось Alehana, 24.10.2019 в 10:16.
Ответить с цитированием
  #5 (permalink)  
Старый 24.10.2019, 10:23
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Сообщение от Alehana
$img1=$_FILES["img1"];
$img2=$_FILES["img2"];
Индусы программируют?

Пройдитесь циклом по $_FILES и сделайте, что надо!
Ответить с цитированием
  #6 (permalink)  
Старый 24.10.2019, 11:35
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от Alehana
Т.к количество передаваемых файлов заранее не известно. Как мне там получать их из формы fd1 ?
Не будет на сервере никаких fd1, будет массив $_FILES и $_POST если помимо файлов передавались и другие поля. Именно потому, что количество не известно и именуйте их не "img1", "img2", ... а как "img[]", в этом случае на сервере под ключом img будет массив с вложенными массивами информации о файле: error, tmp_name, size, ...

Обходите массив $_FILES["img"] циклом, если for, то каждая его итерация, это файл.

Именовать как img1, img2, ... нет смысла.

Последний раз редактировалось laimas, 24.10.2019 в 12:48.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как передать два значения внутрь promise js mystica Общие вопросы Javascript 2 18.11.2018 15:25
Flot Как передать переменную в функцию отрисовки точки на графике Ren jQuery 0 20.06.2012 14:16
bind: как передать функции указатель на объект trial jQuery 4 25.05.2010 01:35
Как передать картинку из javascript в php KIVagant AJAX и COMET 3 12.05.2010 11:54
Как в ajax запросе передать файл методом POST mcpro jQuery 1 16.12.2009 11:41