Использование jQuery remove () с кэшированными страницами (Rails backend) - PullRequest
3 голосов
/ 12 апреля 2011

Я использую jQuery с бэкэндом Rails 3, и у меня есть следующий сценарий:

  1. Пользователь видит комментарий к своему сообщению и хочет удалить его
  2. Пользователь нажимает кнопку удаления и удаляет комментарий из базы данных
  3. jQuery использует remove() для удаления элемента из DOM в качестве ответа об успешном выполнении AJAX на шаг 2 выше
  4. Пользователь переходит на другую страницу
  5. Пользователь нажимает кнопку "Назад", чтобы вернуться на страницу с комментарием
  6. Старый комментарий все еще там, хотя он был удален с сервера и из DOM

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

Как предотвратить отображение комментария (или ранее кэшированных объектов, которые были удалены из DOM), когда пользователь нажимает кнопку "Назад"?

Кстати: Пожалуйста, не говорите «не кэшируйте никаких страниц» :) Это не вариант.

Ответы [ 3 ]

0 голосов
/ 16 апреля 2011

Я не знаю, когда это зависит от браузера, и это может нарушить ваши маршруты RESTful, но вы можете выполнить PUT / POST для того же URL, с которого отправлено сообщение, ив ответе AJAX отключите кэширование (используя заголовок Cache-Control).Это должно сделать этот URL недействительным в кеше браузера, так как браузеры обычно не различают использование HTTP-глаголов.

0 голосов
/ 16 апреля 2011

если вы используете кеш страницы rails, вам нужно очистить его при действиях Create, Update и Delete.см ссылка для более подробной информации

0 голосов
/ 12 апреля 2011

Ответ первый: если пользователь использует кнопку «Назад», он не должен удивляться, когда видит вещи из своего прошлого.

Ответ второй: Это немного тяжело, но вы можете попробовать ajaxпозвоните по номеру $(document).ready(), который проверяет устаревший контент.Я не уверен, что это сработает.Если нет, вы можете установить интервал ping для сервера, чтобы дважды проверить, что на экране нет устаревшего контента.(У меня была хорошая производительность с пингами, частыми всего за 7 секунд)

Я не думаю, что есть простой способ сделать это (кроме предотвращения кэширования;)

...