@lid2pro

Как передать данные аякс?

Добрый день,

пытаюсь реализовать мультизагрузку картинок и сохранить в БД. Картинки сохраняются, но не передаются данные с полей input.
// 1) Подгружаем jQuery
    // 2)
    function setimage() { // функция загрузки на сервер
      var iter; // кол-во загруженных картинок
      var max = 200;
      // с классом file_link_name приходят загруженные изображения - счетаем их кол-во
      iter = $('.file_link_name').length;
      if(iter>=max){
        alert('Максимально количество фотографий = 200!')
        return;
      }

      $input = $("#upload_input");
      var fd = new FormData;
      // адрес приемщика файлов
      var $url='/upload.php?action=upload'+'&math='+Math.random()*Math.random();
      // массив файлов в нашем инпате
      var inputFile = document.getElementById('upload_input').files;
      // в цикле по данному массиву отправляем файлы на сервер
      for (var i = 0; i < inputFile.length; i++) {
        if(i>max-1){ // проверка на кол-во
          alert('Максимально количество фотографий = 200!')
          return;
        }
        if(iter>max-1){ // еще одна проверка на кол-во
          alert('Максимально количество фотографий = 200!')
          return;
        }
        // формирую объект data
        fd.append('img', $input.prop('files')[i]);
        $.ajax({
          url: $url,
          data: fd,
          processData: false,
          contentType: false,
          type: 'POST',
          success: function (data) {
            // сервер возвращает нам нимиатюру в data
            $("#result").append(data); // вставляю миниатюру в #result
          },
          error: function(data) {
            // действие при ошибке
          }
        });

      }
    }

    // 3)
    /* Обработчики событий кнопки загрузки и нашего input */
    // откладываю возможность загрузки картинок до полной загрузки страницы
    $(document).ready(function() {
      $( "#upload_button").click(function() { // при нажатии на кнопку загрузить
        $("#upload_input").click(); // нажимаю на input file
      });

      $("#upload_input").change(function() { // когда состояние нашего input file меняется
         setimage(); // вызываю функцию асинхронной загрузки файлов
      });
    });


форма

<form action="/upload.php" method="post" class="form-submit" enctype="multipart/form-data">
<input type="text" name="title" class="modalPopupField" placeholder="Название" required /> <b>как мне передать это поле в обработчик?</b>

<input type="text" name="film" class="modalPopupField" placeholder="Фильм" required /> <b>как мне передать это поле в обработчик?</b>

<input title="Выбрать картинки" type="file" multiple="multiple" name="files[]" class="addbtnupload" accept=".jpg,.jpeg,.gif,.png" id="upload_input"/>


<div id="result"></div>

<input type="button" name="SUBMIT" value="Добавить" class="gabtn gabtnye" id="upload_button">

		</form>

Серверная часть скрипта AJAX (upload.php)
// $upload_dir='./../upload/'; <- если папка назначения выше на каталог
	$upload_dir='./upload/'; // папка назначения
	$name = $_FILES["img"]["name"]; // имя файла с разрешением (как на пк донора :)
	$ext = end((explode(".", $name))); // беру разрешение файла
        // если в $ext больше одного разрешения файла, оставлю последний
	$ext = pathinfo($name, PATHINFO_EXTENSION);
        $md_name = MD5($name); // сделал из имяни хэш
	$now=time(); // timestamp
	$file_name = $md_name.$now.'.'.$ext; // сделал новое имя картинке
	$new_name=$upload_dir.$file_name; // путь/имя-файла

    // Функция делает превьюшки (c PNG не работает)
    function resize($img){
       // only if you script on another folder get the file name
        $r = explode("/",$img);
        $name = end($r);
        //new folder
        // $vdir_upload = './../upload/';
        $vdir_upload = './upload/';
        list($width_orig, $height_orig) = getimagesize($img);
        //ne size
        $dst_width = 320; // ширина миниатюр на выходе
        $dst_height = ($dst_width/$width_orig)*$height_orig;
        $im = imagecreatetruecolor($dst_width,$dst_height);
        $image = imagecreatefromjpeg($img);
    imagecopyresampled($im, $image, 0, 0, 0, 0, $dst_width, $dst_height, $width_orig, $height_orig);
        //modive the name as u need
        imagejpeg($im,$vdir_upload . "small_" . $name);
        //save memory
        imagedestroy($im);
        // возвращаю из функции абсолютный путь до миниатюры
        return '/upload/small_'.$name;
    }
      // копирую картинку в нужную нам папку
    	if (copy($_FILES['img']['tmp_name'], $new_name))
    	{
    	  $original_file='/upload/'.$file_name;
          $small_file = resize($new_name);
          // тут сохранение в БД SQL запросов


    	} else {
         echo "Error! Не удалось загрузить файл на сервер!";
         exit;
    	}
    // возвращаю миниатюру картинки в наш JS
    // исправь на  echo '<      // [баг с выводои img тега в код примера]
    echo <'img src="'.$new_name.'" class="img-rounded file_link_name">';


Файлы закачиваются на сервере, но данные из полей input name="title" и name="film" на передаются по POST в обработчик. Помогите пожалуйста.

Делал на основе этого https://frolenok-andrey.ru/ajax/ajax_download_image
  • Вопрос задан
  • 136 просмотров
Решения вопроса 1
irishmann
@irishmann
Научись пользоваться дебаггером
Дай полям id, укажи value.
Прочитать можно так
var input_value = $('#id_input').val();
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы