Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 07.06.2016, 14:32
Интересующийся
Отправить личное сообщение для Le7o Посмотреть профиль Найти все сообщения от Le7o
 
Регистрация: 08.04.2011
Сообщений: 26

Отправка и получение данных AJAX
Доброго времени.

Такая ситуация: на странице есть таблица, пытаюсь сделать добавление записи через всплывающую форму (на форме два поля типа file) - поэтому для отправки формы использую formData, с отправкой проблем не возникает, а вот как отправленные данные вставить в таблицу на форме не могу понять?

Вот что использую для отправки:
$('#modal_form').on('submit', function (e) {
        e.preventDefault();
        var $that = $(this),
            formData = new FormData($that.get(0));
            formData.append('type_form', 'table1');
/* для проверки отправляемых данных */
        console.log(formData.get('type_form'));
        console.log(formData.get('f1'));
        console.log(formData.get('f2'));
        console.log(formData.get('f3'));
        console.log(formData.get('f4'));
        console.log(formData.get('f5'));
/* для проверки отправляемых данных */
        $.ajax({
            url: $that.attr('action'),
            type: $that.attr('method'),
            contentType: false,
            processData: false,
            data: formData,
            //dataType: 'json',
            success: function (data) {
                if (data == '1'){
                    alert('Данные успешно добавлены');
                } else {
                    $('#modal_form #msg').fadeIn(100).delay(5000).html(data);
                    $('#modal_form #msg').fadeOut(100).html(data);
                }
            }
        });
    });


Теоретически подозреваю, что нужно с сервера только что добавленные поля собирать в массив или делать запрос к БД и обратно отправлять и вставлять их в таблицу!?
А вот каким образом?
Ответить с цитированием
  #2 (permalink)  
Старый 07.06.2016, 14:52
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Что вы хотите вставлять в базу, а затем в форму, если форма отправляет файлы?
Ответить с цитированием
  #3 (permalink)  
Старый 07.06.2016, 15:22
Интересующийся
Отправить личное сообщение для Le7o Посмотреть профиль Найти все сообщения от Le7o
 
Регистрация: 08.04.2011
Сообщений: 26

Сообщение от laimas Посмотреть сообщение
Что вы хотите вставлять в базу, а затем в форму, если форма отправляет файлы?
formData содержит:
- 4 текстовых поля
- 2 поля с файлами

С передачей серверу у меня проблем не возникает, возникают проблемы с вставкой отправленных данных в таблицу без перезагрузки страницы?

Последний раз редактировалось Le7o, 07.06.2016 в 15:23. Причина: сформулировал.
Ответить с цитированием
  #4 (permalink)  
Старый 07.06.2016, 15:35
Интересующийся
Отправить личное сообщение для Le7o Посмотреть профиль Найти все сообщения от Le7o
 
Регистрация: 08.04.2011
Сообщений: 26

Возможно не понятно изъясняюсь, что хочу в итоге:
0. открыл страницу в браузере, по середине таблица:
| Заголовок 1 | Заголовок 2 | Заголовок 3 | Заголовок 4 |
| Пустое поле | Пустое поле | Пустое поле | КНОПКА ДОБАВИТЬ


1. нажал кнопку "Добавить", открылась модальная форма - уже сделал!
2. заполнил данные, нажал "Сохранить", данные добавились в таблицу - уже сделал!
3. без перезагрузки страницы данные появились в ячейке на странице - пытаюсь сделать

По пункту 3, что бы в строку где "Пустое поле"(пункт 0) появились отправленные в шаге 2 значения.
Ответить с цитированием
  #5 (permalink)  
Старый 07.06.2016, 15:45
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Я о передаче и не спрашивал, и об Ajax тоже, хотя есть замечание - тип отправки должен быть указан как POST. Вы пишите:

а вот как отправленные данные вставить в таблицу на форме не могу понять?
Теоретически подозреваю, что нужно с сервера только что добавленные поля собирать в массив или делать запрос к БД и обратно отправлять и вставлять их в таблицу!?


Вот это кроссворд.

Данные в базу записываются запросом к базе. Но изначально упоминалось только о полях file, и хотя записать файл в базу можно (тип данных BLOB), но без пущей на то необходимости делать этого не стоит. Поэтому тут могут быть варианты записи данные/файлы.

А вот что такое собрать в массив (форма полученная сервером, это и есть массив), который обратно отправлять... это о чем?
Ответить с цитированием
  #6 (permalink)  
Старый 07.06.2016, 15:50
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

| Заголовок 1 | Заголовок 2 | Заголовок 3 | Заголовок 4 |
| Пустое поле | Пустое поле | Пустое поле | КНОПКА ДОБАВИТЬ

Заполняя форму (текстовые поля) вы фактически уже заполняете данными таблицу на клиенте. Достаточно серверу по приему данных ответить "Сделано сэр", тогда клиенту перенести значения полей формы в ячейку таблицы, удалив поле формы. То есть гонять туда сюда данные в общем то нет необходимости. Единственное, это файлы, на которые сервер может вернуть ссылку, и которые будут отображены в таблице, например загруженные изображения.

То есть станет

| Заголовок 1 | Заголовок 2 | Заголовок 3 | Заголовок 4 |
| Значение из поля ввода | Значение из поля ввода | Значение из поля ввода | Пусто или Редактировать
Ответить с цитированием
  #7 (permalink)  
Старый 07.06.2016, 15:51
Интересующийся
Отправить личное сообщение для Le7o Посмотреть профиль Найти все сообщения от Le7o
 
Регистрация: 08.04.2011
Сообщений: 26

Метод POST у меня берется из action формы, как и URL:
url: $that.attr('action'),
type: $that.attr('method'),


В БД файлы я не пишу, я пишу только пути к файлам...

По итогу после добавления данных (отправки формы), хочу без перезагрузки страницы отобразить их(добавленные данные)...
Ответить с цитированием
  #8 (permalink)  
Старый 07.06.2016, 15:52
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от Le7o
Метод POST у меня берется из action формы
Да, проглядел я.
Ответить с цитированием
  #9 (permalink)  
Старый 07.06.2016, 15:54
Интересующийся
Отправить личное сообщение для Le7o Посмотреть профиль Найти все сообщения от Le7o
 
Регистрация: 08.04.2011
Сообщений: 26

Сообщение от laimas Посмотреть сообщение
| Заголовок 1 | Заголовок 2 | Заголовок 3 | Заголовок 4 |
| Пустое поле | Пустое поле | Пустое поле | КНОПКА ДОБАВИТЬ

Заполняя форму (текстовые поля) вы фактически уже заполняете данными таблицу на клиенте. Достаточно серверу по приему данных ответить "Сделано сэр", тогда клиенту перенести значения полей формы в ячейку таблицы, удалив поле формы. То есть гонять туда сюда данные в общем то нет необходимости. Единственное, это файлы, на которые сервер может вернуть ссылку, и которые будут отображены в таблице, например загруженные изображения.

То есть станет

| Заголовок 1 | Заголовок 2 | Заголовок 3 | Заголовок 4 |
| Значение из поля ввода | Значение из поля ввода | Значение из поля ввода | Пусто или Редактировать
Да все верно, только как эти значения вставить, в случае успешного ответа от сервера вставить в таблицу которая на странице?


success: function (data) {
        if (data == '1'){
               alert('Данные успешно добавлены');
               // ЗДЕСЬ МНЕ КАК НУЖНО ВСТАВИТЬ ДАННЫЕ В ТАБЛИЦУ на странице
               // Пытался обращаться здесь к formData.get('f1') - но выдает ошибку...
        } else {
                    $('#doc_modal_form #msg').fadeIn(100).delay(5000).html(data);
                    $('#doc_modal_form #msg').fadeOut(100).html(data);
                }
            }

Последний раз редактировалось Le7o, 07.06.2016 в 15:59.
Ответить с цитированием
  #10 (permalink)  
Старый 07.06.2016, 16:12
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

У вас есть всего два варианта:

1) Форма, это де-факто диалог клиент-сервер, который подразумевает обязательную проверку данных сервером. Сервер не поместит данные формы в базу до тех пор, пока они не будут отвечать условиям. Отсюда следует, что данные помещаемые в базу, это есть клон данных в форме клиента (диалог то асинхронный). Значит зачем возвращать клиенту то, что у него и так имеется - берем значения value каждого поля формы и помещаем его в ячейку таблицы, в которой находится поле ввода. Само поле ввода удаляем. И так со всеми полями формы.
Что касаемо файлов, то с ними можно поступить точно также. Но тут могут быть же тоже вариации - например, файлы, это изображения, и средствами HTML5 можно организовать их предпросмотр, а значит и оставить в таблице как информация о том, что загружено. Но если изображение при загрузке обрабатывается сервером, то желательно видеть результат, а значит серверу нужно возвращать адрес на успешно загруженное изображение.
Ну и плюс - допустим, что уже добавленное в базу можно было редактировать, значит нужно не удалять поля и не переписывать их значения в таблицу, а всего лишь менять стиль (для выделения) и режим полей (например ключ), и кнопку на "Редактирование". В этом случае сервер должен вернуть идентификатор добавленной записи этих данных.

2) Север возвращает принятые данные, которые отобразятся на клиенте. Но такое делать имеет смысл тогда, когда сервер производит некие манипуляции с данными, модифицирует их, иначе то смысла нет.

Последний раз редактировалось laimas, 07.06.2016 в 16:18.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Отправка данных формы. Как выглядит структура метода с AJAX (по JQuery)? Coriolan161 AJAX и COMET 5 24.11.2015 20:17
Отправка данных AJAX из модального окна r06otyaga jQuery 0 15.11.2015 19:28
Ajax отправка данных Serhiy AJAX и COMET 0 29.01.2014 19:03
Ajax. Получение данных. X-man AJAX и COMET 5 14.11.2013 14:15
отправка данных в инпут через AJAX imediasun1 Элементы интерфейса 2 30.01.2013 18:06