weranda
@weranda

Как лучше подгружать позиции select > option?

Есть форма с полем выбора select > option. Поле предназначено для выбора дня, а именно пяти дней, первый из которых начнется послезавтра, т.е. если сегодня вторник, то в поле должны появиться четверг, пятница, суббота, воскресенье и понедельник.
Сейчас реализовал так:
При нажатии на кнопку выбора дня идет JS Ajax запрос к PHP файлу, который возвращает нужные дни, а потом полученные данные добавляются к полю. Работает, но есть проблема. Сразу поясню её графикой.
1. Вот так выглядит выбор:
5fa16b8f38a3e535101056.png
2. Первый клик (видно появление одного варианта выбора):
5fa16b96b82f5804806462.png
3. Отрабатывает запрос и данные добавляются и картинка меняется:
5fa16b9ed91c1982216672.png
Оно работает, но хочется отсутствие такого мигания. Какие есть варианты?

Вариант с подгрузкой данных при загрузке страницы может осложниться тем, что если человек на обновлял страницу со вчерашнего дня, тогда данные будут не верны.
  • Вопрос задан
  • 42 просмотра
Решения вопроса 1
Kozack
@Kozack Куратор тега JavaScript
Thinking about a11y
  1. Все поля для выбора должны приходить вместе со страницей. Не нужно ничего подгружать. Ваш PHP должен генерировать <select> вместе с остальной страницей.
  2. если человек на обновлял страницу со вчерашнего дня, тогда данные будут не верны.

    Это можно решить тремя способами:
    1. Просто добавить на сервер валидацию: проверить, что выбранный день точно входит в дозволенные рамки. Если нет -- выдать ошибку. После обновления страницы пользователь увидит ошибку и попробует повторить запрос но уже с актуальными данными.
    2. На клиенте можно добавить таймер, который будет обновлять варианты выбора с каким-то интервалом. Опять таки для этого не обязательно выполнять запрос на сервер.
    3. Добавить валидацию на клиенте и на сервере. При попытке отправить форму, скрипт проверяет допустима ли дата. Если нет: обновляет варианты выбора и показывает пользователю сообщение, что выбранная дата не валидна. А чтобы избежать попыток обойти валидацию нужно продублировать и на сервере.




Таким образом при загрузке страницы у вас сразу будут установлены варианты выбора и вы избежите ошибок при не корректном выборе
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы