Не приходит ответ при загрузке файла

D
На сайте с 28.06.2008
Offline
1104
137

Загружаю файл через форму

    <form method="POST" name="email_form_with_php" enctype="multipart/form-data" id="fupForm">

        <label for='name'>Имя: </label>
        <input type="text" name="name" id="name"><br>

        <label for='uploaded_file'>Выберите файл для загрузки :</label>
        <input type="file" required accept=".xls,.xlsx" name="uploaded_file" id="uploaded_file"><br>

        <input type="submit" name="submit" class="btn btn-danger submitBtn" value="отправить"/>
        <p class="statusMsg">
            <!-- Результат -->
        </p>
    </form>
    <script>
        $(document).ready(function (e) {
            $("#fupForm").on('submit', function (e) {
                e.preventDefault();
                $.ajax({
                    type: 'POST',
                    url: 'index.php',
                    data: new FormData(this),
                    contentType: false,
                    cache: false,
                    processData: false,
                    beforeSend: function () {
                        $('.submitBtn').attr("disabled", "disabled");
                        $('#fupForm').css("opacity", ".5");
                    },
                    success: function (msg) {
                        console.log(msg);
                        $('.statusMsg').html('');
                        if (msg == '') {
                            $('#fupForm')[0].reset();
                            $('.statusMsg').html('<span style="font-size:18px;color:#34A853">Данные формы успешно отправлены.</span>');
                        } else {
                            $('.statusMsg').html('<span style="font-size:18px;color:#EA4335">Возникла проблема, пожалуйста, попробуйте еще раз.</span>');
                        }
                        $('#fupForm').css("opacity", "");
                        $(".submitBtn").removeAttr("disabled");
                    }
                });
            });

            //Проверка типа файла
            $("#uploaded_file").change(function () {
                let file = this.files[0];
                let xlsfile = file.type;
                console.log(xlsfile)
                let match = "application/vnd.ms-excel";
                if (xlsfile !== match) {
                    alert('Пожалуйста, выберите правильный файл (.xlsx/.xls).');
                    $("#uploaded_file").val('');
                    return false;
                }
            });
        });
    </script>

Обрабатываю POST

    $path = __DIR__ . '/';
    $error = $success = '';
   

    // Оставляем в имени файла только буквы, цифры и некоторые символы.
    $pattern = "[^a-zа-яё0-9,~!@#%^-_\$\?\(\)\{\}\[\]\.]";
    $name = mb_eregi_replace($pattern, '-', $_FILES['uploaded_file']['name']);
    $name = mb_ereg_replace('[-]+', '-', $name);
    file_put_contents('/var/www/com/test.txt', print_r($name,true). PHP_EOL, FILE_APPEND | LOCK_EX);

    // Перемещаем файл в директорию.
    if (move_uploaded_file($_FILES['uploaded_file']['tmp_name'], $path . $name)) {
        // Далее можно сохранить название файла в БД и т.п.
        $success = '<p style="color: green">Файл «' . $name . '» успешно загружен.</p>';
    } else {
        $error = 'Не удалось загрузить файл.';
    }


// Вывод сообщения о результате загрузки.
    if (!empty($error)) {
        $error = '<p style="color: red">' . $error . '</p>';
    }
    $data = array(
        'error' => $error,
        'success' => $success,
    );
//file_put_contents('/var/www/com/test.txt', print_r($data ,true). PHP_EOL, FILE_APPEND | LOCK_EX);
    header('Content-Type: application/json');
    echo json_encode($data, JSON_UNESCAPED_UNICODE);
    exit();

В итоге в файл test.txt пишется 

Array
(
    [error] => 
    [success] => <p style="color: green">Файл «price.xls» успешно загружен.</p>
)

А на фронте в 

 console.log(msg);

ничего.

Где ошибаюсь?

LEOnidUKG
На сайте с 25.11.2006
Online
1745
#1
ну в консоле разработчика браузера, что в ответ то отправляется скрипту?
✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/ ✅ Настройка и оптимизация серверов https://getmanyspeed.ru/
LEOnidUKG
На сайте с 25.11.2006
Online
1745
#2

Вот даже сразу копипаст видно: https://snipp.ru/jquery/uploads-files-ajax-jquery

Только кто-то уже своими ручёнками туда полазил 😂

Загрузка файлов через jQuery AJAX
Загрузка файлов через jQuery AJAX
  • 2020.10.07
  • snipp.ru
  • snipp.ru
В преведущей статье был приведен пример отправки файлов через AJAX с помощью плагина «jQuery Form Plugin». Но файлы можно отправить и обычным методом jQuery . Для примера возьмем поле и элемент с для вывода результата. Чтобы отправить файл нужно отправить его бинарный данные, для этого...
D
На сайте с 28.06.2008
Offline
1104
#3
LEOnidUKG #:

Вот даже сразу копипаст видно: https://snipp.ru/jquery/uploads-files-ajax-jquery

Только кто-то уже своими ручёнками туда полазил 😂

В итоге зависаем секунд на 30 и потом выдает  "Возникла проблема, пожалуйста, попробуйте еще раз." 

т.е. срабатывает условие что 

if (msg == '') { 
} else {
$('.statusMsg').html('<span >Возникла проблема, пожалуйста, попробуйте еще раз.</span>');
}
D
На сайте с 28.06.2008
Offline
1104
#4
Проблема решена. И форма и логика была в одном файле - как только разделил на два - все стало ок
W1
На сайте с 22.01.2021
Offline
304
#5
Dram #:
Проблема решена. И форма и логика была в одном файле - как только разделил на два - все стало ок

Просто не надо отдавать в ответ форму, если предполагается ответ json. Дело не в количестве файлов, а в мусоре в ответе  json. Даже пробельные символы могут повлиять.

Мой форум - https://webinfo.guru –Там я всегда на связи

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий