Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

Трабла с FormData PHP

, Тугое получение данных [РЕШЕНО]
MpAimPro
сообщение 7.3.2017, 5:54
Сообщение #1
Стаж: 9 лет
Город: Минск

Сообщений: 827
Благодарностей: 205
Полезность: 253

Меценат Меценат

Решил немного переписать эементы ну и закинуть их на FormData.
Только происходить вообще не понятно что.
Именно текстовые поля которые находятся под CKEDITOR получаются только после второго клика на Button

Те, человек заполнил данные нажал далее, понятное дело скрипт даёт ошибку что поля пустые, второй клик по кнопке и ошибка пропадает тк появляются данные.

Вот часть кода, сам ajax FormData ну и сама форма
PS Мультиплатформ и сам FormData делается из-за того что в форме передаются файлы
Сам код
Код
<form enctype="multipart/form-data" action="../rect/actions_admin.php" method="POST" id="add_assembly_file">
<textarea id="desc_1" rows="10" cols="80" name="desc_1"></textarea>
<script>
        CKEDITOR.replace( 'desc_1' );
</script>
</form>
<script>
    $("#add_assembly_file").submit(function (event){
        event.preventDefault();
        var data = new FormData($('#add_assembly_file')[0]);
        $.ajax({
            type: "POST",
            url: "../rect/actions_admin.php",
            data: data,
            contentType: false,
            processData: false,
        }).done(function (html) {
            $("#create_assebly_result").empty();
            $("#create_assebly_result").append(html);
        });
    });
</script>


Где я ошибся. Подскажите кому не трудно.
Заранее спасибо
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя onotole
сообщение 7.3.2017, 8:45
Сообщение #2


Иконка группы

Стаж: 13 лет

Сообщений: 1572
Благодарностей: 1119
Полезность: 1550

Меценат Меценат

Таким образом ты не отправишь файлы аяксом.
Что в консоли?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
MpAimPro
сообщение 7.3.2017, 9:04
Сообщение #3
Стаж: 9 лет
Город: Минск

Сообщений: 827
Благодарностей: 205
Полезность: 253

Меценат Меценат

Цитата(onotole @ 7.3.2017, 9:45) *
Таким образом ты не отправишь файлы аяксом.
Что в консоли?

Консоль чистая.
PS А как тогда отправлять файлы по ajax если не FormData ?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя default1k
сообщение 7.3.2017, 9:25
Сообщение #4
Стаж: 12 лет

Сообщений: 718
Благодарностей: 180
Полезность: 153

Формы с файлами нельзя сабмитить аяксово, это связано с безопасностью. Но решения есть.

Отредактировал: default1k, - 7.3.2017, 9:34
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя default1k
сообщение 7.3.2017, 9:47
Сообщение #5
Стаж: 12 лет

Сообщений: 718
Благодарностей: 180
Полезность: 153

P.S Используй XMLHttpRequest вместо Ajax
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя onotole
сообщение 7.3.2017, 10:22
Сообщение #6


Иконка группы

Стаж: 13 лет

Сообщений: 1572
Благодарностей: 1119
Полезность: 1550

Меценат Меценат

Цитата(default1k @ 7.3.2017, 10:47) *
P.S Используй XMLHttpRequest вместо Ajax

Я, может быть, открою для тебя большую новость. Может эта новость тебя ошарашит, но AJAX это и есть XMLHttpRequest

MpAimPro, Через фреймы. В интернете много библиотек, позволяющих лить файлы аяксом
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя default1k
сообщение 7.3.2017, 10:40
Сообщение #7
Стаж: 12 лет

Сообщений: 718
Благодарностей: 180
Полезность: 153

onotole, Я про синтаксис говорю...
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя BaHeK
сообщение 7.3.2017, 11:48
Сообщение #8


Стаж: 17 лет

Сообщений: 571
Благодарностей: 505
Полезность: 651

Файл можно так залить
Код
file = $('input[type="file"]').prop('files')[0];
data = new FormData();
data.append('Filedata', file);
data.append('text', 'text')


Отредактировал: BaHeK, - 7.3.2017, 11:49


Чуть-чуть нарушаю
http://img-host.su/aoN1.png
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя jtiq
сообщение 7.3.2017, 13:28
Сообщение #9


Иконка группы

Стаж: 18 лет

Сообщений: 1717
Благодарностей: 767
Полезность: 979

Меценат Меценат

вот нашел jquery + ajax
Код
var formData = new FormData($(".file_upload_form")[0]);
$.ajax({
    url: "upload_file.php", // server script to process data (POST !!!)
    type: 'POST',
    xhr: function() { // custom xhr
        myXhr = $.ajaxSettings.xhr();
        if (myXhr.upload) { // check if upload property exists
            // for handling the progress of the upload
            myXhr.upload.addEventListener('progress', progressHandlingFunction, false);
        }
        return myXhr;
    },
    success: function(result) {
        console.log($.ajaxSettings.xhr().upload);
        alert(result);
    },
    // Form data
    data: formData,
    //Options to tell JQuery not to process data or worry about content-type
    cache: false,
    contentType: "application/octet-stream", // Helps recognize data as bytes
    processData: false
});

function progressHandlingFunction(e) {
    if (e.lengthComputable) {
        $("#progress").text(e.loaded + " / " + e.total);
    }
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
MpAimPro
сообщение 8.3.2017, 1:57
Сообщение #10
Стаж: 9 лет
Город: Минск

Сообщений: 827
Благодарностей: 205
Полезность: 253

Меценат Меценат

В общем спасибо за советы.
Перевёл элементы на фрэйм :)
Ну а это трабла заключалось в том что нужно обновить эллемент CKEDITOR
Код
<button id="add" type="submit" class="btn btn-default" onclick="CKupdate();">Загрузить</button>
function CKupdate() {
      for (instance in CKEDITOR.instances)  CKEDITOR.instances[instance].updateElement();
}


При прямом запросе ajax нужно получать переменную таким образом

Код
var text = CKEDITOR.instances.text.getData();


PS Не считайте что я нуб, просто с тинит решил перейти на CK а тут свои заморочки )

Отредактировал: MpAimPro, - 8.3.2017, 1:58
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: