Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.02.2023, 14:44   #1
Krasi
Форумчанин
 
Регистрация: 12.02.2010
Сообщений: 787
По умолчанию Не работает отправка файлы в форме AJAX

Данные отправляются и записываются в базу данных, но когда стал впридачу отправлять файл - его как будто файл php просто не видит и не получает. В чем дело?

Код:
<form id="article_form">
	    <input type="email" placeholder="Email" required>
	    <input type="text" name="title" style="line-height: normal;" placeholder="Название" required>
	    <input type="text" name="author" placeholder="Основной автор" required>
	    <input type="text" name="aubauthors" placeholder='Еще авторы через ","' required>
	    <textarea name="abstract" placeholder="Резюме" style="height: 70px; text-align: left; text-indent: 20px;" cols="20"></textarea>
		<!--<input type="file" name="f">-->
		<input type="file" name="audio_link" form="article_form" multiple id="js-file">

	    <div id="result" style="min-height: 5px;">
        	<!-- Результат из upload_article.php -->
        </div>
		<button id = 'js-button'>Отправить</button>
	</form>

$("#article_form").submit(function(event){
    event.preventDefault();
    
    sendAjaxForm('result', 'article_form', 'upload_article1.php');

    function sendAjaxForm(result_form, ajax_form, url) {
    jQuery.ajax({
        url:     url, //url страницы (action_ajax_form.php)
        type:     "POST", //метод отправки
        dataType: "html", //формат данных
        data: jQuery("#"+ajax_form).serialize(),  // Сеарилизуем объект
        success: function(response) { //Данные отправлены успешно
            result = jQuery.parseJSON(response);
            document.getElementById(result_form).innerHTML = result;
        },
        error: function(response) { // Данные не отправлены
            document.getElementById(result_form).innerHTML = "Ошибка. Данные не отправленны.";
        }
    });
}
		
});

Содержимое файла upload_article1.php
Код:
$("#article_form").submit(function(event){
    event.preventDefault();
    
    sendAjaxForm('result', 'article_form', 'upload_article1.php');

    function sendAjaxForm(result_form, ajax_form, url) {
    jQuery.ajax({
        url:     url, //url страницы (action_ajax_form.php)
        type:     "POST", //метод отправки
        dataType: "html", //формат данных
        data: jQuery("#"+ajax_form).serialize(),  // Сеарилизуем объект
        success: function(response) { //Данные отправлены успешно
            result = jQuery.parseJSON(response);
            document.getElementById(result_form).innerHTML = result;
        },
        error: function(response) { // Данные не отправлены
            document.getElementById(result_form).innerHTML = "Ошибка. Данные не отправленны.";
        }
    });
}
		
});
Krasi вне форума Ответить с цитированием
Старый 12.02.2023, 15:15   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Так файл или имя файла? Если прям файл, то, собственно, где чтение файла то?
p51x вне форума Ответить с цитированием
Старый 12.02.2023, 18:22   #3
Krasi
Форумчанин
 
Регистрация: 12.02.2010
Сообщений: 787
По умолчанию

Хороший вопрос, потому что в этом я плаваю.
Код:
<input type="file" name="audio_link" form="article_form" multiple id="js-file">
Вообще тут грузится сам файл. Ну реально через интерфейс я его гружу при каждом тесте... Затем моя логика такова, что на этой строчке передаются все данные формы, в том числе и файл...
Код:
data: jQuery("#"+ajax_form).serialize(),  // Сеарилизуем объект
но тут при передаче файлов в подобных задачах я раньше часто использовал готовые решения и, наверное, не прав, но в чем - помогите понять, пожалуйста.
Krasi вне форума Ответить с цитированием
Старый 12.02.2023, 19:15   #4
Valick
Форумчанин
 
Регистрация: 27.04.2022
Сообщений: 493
По умолчанию

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

Код:
function setimage() {
    var $input = $("#uploadimage");
    var fd = new FormData;

    fd.append('img', $input.prop('files')[0]);

    $.ajax({
        url: 'http://example.com/script.php',
        data: fd,
        processData: false,
        contentType: false,
        type: 'POST',
        success: function (data) {
            alert(data);
        }
    });
}
https://wp-kama.ru/id_9026/jquery-aj...na-server.html
https://basecourse.ru/ajax/file.php

Последний раз редактировалось Valick; 12.02.2023 в 19:17.
Valick вне форума Ответить с цитированием
Старый 12.02.2023, 21:53   #5
Krasi
Форумчанин
 
Регистрация: 12.02.2010
Сообщений: 787
По умолчанию

Отдельно я так делал, но вопрос в том, что мне все поля формы нужны. Как тогда, если нужно и titile и тп добавить?
Каждый раз делать
Код:
 fd.append('img', $input.prop('files')[0]);
не камильфо, если будет 20 полей...
Krasi вне форума Ответить с цитированием
Старый 22.02.2023, 23:37   #6
Krasi
Форумчанин
 
Регистрация: 12.02.2010
Сообщений: 787
По умолчанию

актуально, что в моем случае делать то?
Krasi вне форума Ответить с цитированием
Старый 23.02.2023, 11:41   #7
Valick
Форумчанин
 
Регистрация: 27.04.2022
Сообщений: 493
По умолчанию

Я тебе уже ответил, что надо делать в твоём случае (использовать FormData). Но тебе оно не камильфо.
Не нарвится, жди когда я напишу универсальный обработчик, а напишу я его тогда когда у меня будет свободное время. Либо ищи в гугле сам.
Valick вне форума Ответить с цитированием
Старый 23.02.2023, 15:24   #8
Krasi
Форумчанин
 
Регистрация: 12.02.2010
Сообщений: 787
По умолчанию

Да можно и FormData, просто скинь плиз пример тогда, я тут чуть плаваю реально. Мне же и файл передать надо, и остальные поля формы
Krasi вне форума Ответить с цитированием
Старый 13.03.2023, 11:55   #9
Krasi
Форумчанин
 
Регистрация: 12.02.2010
Сообщений: 787
По умолчанию

Получилось, тема закрыта
Krasi вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[РЕШЕНО][JavaScript] AJAX отправка данных из формы из выпадающего списка select MalerBrash JavaScript, Ajax 19 11.11.2019 23:37
Отправка ajax Alexeq JavaScript, Ajax 3 27.12.2015 16:29
Отправка Ajax запроса после навидения и удержание курсора N время ogamilait JavaScript, Ajax 3 10.12.2014 18:34
Отправка данных формы AJAX`ом? Jopses JavaScript, Ajax 4 19.02.2013 15:16
Не работает ajax livesport JavaScript, Ajax 2 04.04.2012 07:59