Помните, что флажки отмечены на разных страницах – какой лучший способ?

Мне нужно добавить функциональность, похожую на Gmail, где флажки в списке элементов запоминаются на нескольких страницах результатов и когда они уходят и возвращаются к результату. То, что я пытаюсь понять, – лучший способ сделать это. Я использую PHP и, вероятно, jQuery.

Моя первая мысль состоит в том, чтобы добавить onClick к каждому флажку, который запускает вызов AJAX на сервер, который хранит идентификатор в массиве в сеансе. Каждый раз, когда список элементов загружается, система проверяет, проверена ли строка, и установите флажок, если необходимо. Для надежности флажок будет снят без проверки, если запрос на сервер не может быть завершен (проблема подключения, ошибка сервера и т. Д.), И запрос будет сделан как можно быстрее.

Это звучит хорошо, за исключением нескольких предметов:

  • проверить все: что происходит? Он отправляет на сервер 30 запросов по умолчанию (по умолчанию)? Или я удалю все onClicks, отметьте флажки, отправьте запрос на сервер со всеми идентификаторами, а затем повторно добавьте onClicks? Или…? Аналогичная проблема снята.
  • скорость: могут возникнуть проблемы, если все 100 пользователей все время проверяют и снимают все флажки
  • скорость браузера: я думаю, что лучше добавить onClick с JS после загрузки страницы, что, я думаю, может занять секунду или 2, если на одной странице 500 или более элементов. Стало бы большой проблемой с проверкой всех.

Раньше я не нашел надежного способа обнаружить, когда пользователь покидает страницу. Если есть надежный способ, я мог бы видеть, что это вариант, поэтому он просто записывает на каждую страницу разгрузку.

Есть ли другие решения или лучшие методы?

Изменить: Как упоминал Эран Гальперин , проверка всего метода должна была бы только проверить каждый флажок, а затем сделать ajax-вызов со всеми строками. Не нужно удалять onClick.

Кроме того, похоже, что метод делегирования событий является хорошей идеей – это упростит ситуацию.

  1. Событие onclick не будет запускаться, если вы программно измените проверенный статус флажка. Вы можете отправить другой запрос AJAX, когда пользователь нажимает ссылку «Проверить все / Удалить», не беспокоясь о событиях кликов, которые вы прикрепляете к отдельным флажкам.
  2. Это компромисс при использовании запроса за клик. В качестве альтернативы используйте кнопку «Сохранить», которая сохраняет всю форму.
  3. Делегирование событий – присоедините одно событие onclick ко всему контейнеру, который содержит все флажки, и проверьте цель события, чтобы увидеть, был ли установлен флажок. Кроме того, лично я бы не показывал 500 различных опций на одной странице. Если абсолютно необходимо иметь так много вариантов, разделите их на несколько зон / страниц.

Для пользователя, покидающего страницу, вы можете использовать событие onbeforeonload , однако, если браузер выходит из строя или иным образом выходит из строя, он не будет пойман. Используйте его в зависимости от того, насколько важно, чтобы он мог записывать пользовательские изменения.