За последние 24 часа нас посетили 62136 программистов и 1792 робота. Сейчас ищут 914 программистов ...

AJAX передача данных формы по частям

Тема в разделе "JavaScript и AJAX", создана пользователем beshot, 18 май 2015.

  1. beshot

    beshot Новичок

    С нами с:
    18 май 2015
    Сообщения:
    24
    Симпатии:
    0
    Доброго дня!

    Есть html страница с полями и прочими контролами, а также выбранными файлами на компе пользователя.
    Рассматривается идея использовать отдельные запросы для передачи каждого значения поля, списка и т.п. Файлы передаются поштучно. Сериализация не используется.
    Темный момент: не слишком ли много запросов к серверу и вообще, не проще ли сериализовать?
    Опыта не имею, прошу снисхождения.
     
  2. mr.akv

    mr.akv Активный пользователь

    С нами с:
    31 мар 2015
    Сообщения:
    1.604
    Симпатии:
    206
    Конечно проще сериализовать. Либо одна строчка сериализации, либо хрен знает сколько строчек с поштучным выбором. А на стороне сервера уже можно просто не использовать то. что вам не нужно. И, хотя, если бы вам было что-то не нужно, то и в форме быть этого не должно. В общем я не понимаю, зачем вы хотите делить.
     
  3. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    А чем эта идея продиктована?
    А как собираетесь гарантировать целостность связки запросов?
     
  4. beshot

    beshot Новичок

    С нами с:
    18 май 2015
    Сообщения:
    24
    Симпатии:
    0
    Да попросту, сериализовать я еще не пробовал, а вот JS объект с возможностью отправки как файлов, так и текста уже есть.
    А кроме того, при таком способе мне проще разбирать ответы сервера.

    Целостность связки, хороший вопрос, должной проработки еще не получил. Собственно оттого и пост.
     
  5. Zuldek

    Zuldek Старожил

    С нами с:
    13 май 2014
    Сообщения:
    2.381
    Симпатии:
    344
    Адрес:
    Лондон, Тисовая улица, дом 4, чулан под лестницей
    Если форма отправляется единовременно, всё должно уходить одним запросом.
    Если у в форме или формах на странице происходит асинхронная загрузка файлов отдельной от других формы с текстовыми данными, то они, понятно дело, уходят отдельными запросами.
    Если есть асинхронная загрузка файлов, отдельно от основной формы, соответственно вяжете их по сессии или иному генерируемому ключу для формы: это уже зависит от специфики вашей реализации.
     
  6. beshot

    beshot Новичок

    С нами с:
    18 май 2015
    Сообщения:
    24
    Симпатии:
    0
    Данные на сервер должны приходить одним массивом, иначе не представляю как их сохранять в БД.
    Возвращать ID записи в каждом ответе? Зачем такие сложности?
    Благодарю за помощь, для меня вопрос ясен.
     
  7. Zuldek

    Zuldek Старожил

    С нами с:
    13 май 2014
    Сообщения:
    2.381
    Симпатии:
    344
    Адрес:
    Лондон, Тисовая улица, дом 4, чулан под лестницей
    Ещё раз повторю, специфика вашей реализации нам не известна. Может возникнуть ситуация когда к примеру асинхронно отправляются файлы связанные с нодой (к примеру картинки к объявлению). У пользователя форма с десятком полей и асинхронная загрузка картинок. Вы приняли, обработали 5 картинок, при этом саму заполненную форму объявления о недвижимости пользователь ещё не отправил (более того, он может вообще её закрыть или обновить страницу). При этом файлы вы должны у себя принять, обработать и связать с нодой (объявлением) которая ещё только будет создана (а возможно и не будет).
    Соответственно "такие сложности" обусловлены в числе прочего тем, чтобы, как в приведенном примере, принимать и обрабатывать файлы/поля асинхронно, а не десятками разом.
     
  8. beshot

    beshot Новичок

    С нами с:
    18 май 2015
    Сообщения:
    24
    Симпатии:
    0
    Вы не поверите: http://php.ru/forum/viewtopic.php?f=13&t=53200

    Все типично: это объявление и несколько картинок.
    Да, картинки передаются асинхронно.

    Хотите сказать, такие сложности избежать не удастся?
     
  9. Zuldek

    Zuldek Старожил

    С нами с:
    13 май 2014
    Сообщения:
    2.381
    Симпатии:
    344
    Адрес:
    Лондон, Тисовая улица, дом 4, чулан под лестницей
    Я реализации вашей не вижу, ещё раз вам повторяю.
    Если в требованиях к реализации нет асинхронной загрузки картинок, то можете отправить всю форму разом. Тут во-первых нужно отдавать себе отчет в том, что файлы де факто у вас всё-равно будут передаваться отдельно друг от друга (независимо от того асинхронно их передаем или нет).

    Если стоит задача показать пользователю сразу после загрузки превью картинки, то лучше давать загружать их последовательно а не десятками разом (интерфейсные ограничения: перетаскивание по одному в область загрузки, и/или искусственные задержки: асинхронно шлем на сервере файл только после того как был обработан предыдущий о чем получили ответ сервера. Независимо от того какое количество файлов выбрано пользователем для единовременной загрузки).
    Это в целом упростит и ускорит их ускорит обработку на сервере (что обусловлено банально временными задержками со стороны клиента при поочередной отправке этих файлов)

    Чтобы упростить себе жизнь, если это позволяет тз, можно сделать сначала загрузку формы объявления, а только потом разрешить загружать картинки (раз уж у тс задача с объявлениями).
    В этом случае вы сразу создадите ноду и картинки будут привязаны при загрузке к ней.
    В противном случае, когда ноды у вас нет их придется хранить либо во временном хранилище, либо в постоянном хранилище для изображений вашей бд, но с привязкой к сессии или временному ключу ноды.
    В последнем случае, нужно не забыть эти записи удалить (вместе с файлами) в том случае, если объявление не было создано и переписывать связи, если оно было создано.
     
  10. beshot

    beshot Новичок

    С нами с:
    18 май 2015
    Сообщения:
    24
    Симпатии:
    0
    я извиняюсь, но в посте, ссылка на который немного выше, в принципе, ответ получен.
    благодарю за внимание, рад был по-общаться!