villiwalla
@villiwalla
HTML-верстка

Как возвращать по 1 строке адрес изображения при ajax загрузке?

Как можно реализовать такой момент интерфейса при загрузке изображений через аякс, как показывать привью изображения при успешном сохранение изображения на сервере.

Через аякс отправляю пачку изображений на сервер, обрабатываю изображения на сервере как мне надо, и что-бы не использовать FileReader (если отправляют большую пачку фоток то страница подвисает сильно) для показа превью удачно загруженных фоток. При каждой итерации по обработке фотке отправлю урл до фотки на сервере, но аякс мне возвращает только строку все фоток. А как возвращать только одной строке и потом уже вставлять превью в интерфейсе?

/handlers/upload.php
require '../component/Gallery.php';

if(!empty($_POST['title']) && !empty($_POST['date'])) {

    if(count($_FILES['photos']['name']) > 0) {
        $photo = new Gallery();
        $photo->name = trim(htmlentities($_POST['title']));
        $photo->date = trim(htmlentities($_POST['date']));
        $photo->photo = $_FILES['photos'];
        $photo->upload();
    }

}


Gallery.php

public function upload() {
       for($i = 0; count($this->photo['name']) > $i; $i++) {
           if($this->photo['error'][$i] == 0) {
            $this->createDir();
            move_uploaded_file($this->photo['tmp_name'][$i], $this->upload_dir.'/'.$this->photo['name'][$i]);

            echo $this->show_dir.'/'.$this->photo['name'][$i];
           }
       }
    }


Ajax
$(document).on('submit', '#upload_form', function(e) {
        e.preventDefault();

        let formData = new FormData(this);

        $.ajax({
            type: 'POST',
            url: '/handlers/upload.php',
            data: formData,
            contentType: false,
            processData: false,
            success: function(data) {
                console.log(data); // /uploads/gallery/1/IMG_1210.jpg/uploads/gallery/1/IMG_1234.jpg/uploads/gallery/1/IMG_1258.jpg
            }
        })
    });
  • Вопрос задан
  • 59 просмотров
Решения вопроса 1
webinar
@webinar Куратор тега PHP
Учим yii: https://youtu.be/-WRMlGHLgRg
так отправляете по одному, запросы то асинхронные, можете в js очередь создать, что бы не ожидалось более 5 файлом например, что бы сервер не заплакал
Все виджеты типа dropzone так и работают. Пачку в одном запросе никто не шлет. Потому что если ответ вернется, на этом ajax и закончится. Есть конечно страшные варианты, но зачем если велосипед уже изобрели.
Кстати вот неплохой:
www.dropzonejs.com
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Stalker_RED
@Stalker_RED
Можно отправлять их не все сразу, а по очереди.

А превью можно показывать еще до отправки.
jsfiddle.net/Stalk/cvswequz
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
18 апр. 2024, в 21:56
2000 руб./за проект
18 апр. 2024, в 21:00
150 руб./за проект