jqGrid кэширует данные сетки - PullRequest
       26

jqGrid кэширует данные сетки

2 голосов
/ 14 сентября 2010

У меня есть кнопка, нажав на нее, она должна перейти на другую страницу, содержащую jqGrid..но если пользователь хочет пойти и посмотреть данные, которые должны быть кэшированы и показаны вместо того, чтобы делать вызов серверу .... значения формы были кеш по умолчанию но jqGrid ... как его кешировать?

Ответы [ 2 ]

1 голос
/ 16 сентября 2010

Кэширование данных может быть реализовано, но это не легко.Вы должны определить на стороне сервера некоторые заголовки HTTP на основе выбранной стратегии кэширования .Например, вы можете использовать max-age заголовка HTTP "Cache-Control", например

Cache-Control: max-age=60

, что означает, что ответ сервера должен кэшироваться в течение 60 секунд на клиенте.Если вы планируете использовать это, вам нужно определить дополнительный параметр prmNames:{nd:null} jqGrid, который удалит отправку параметра nd с отметкой времени, включенной в любой запрос к серверу.После выполнения этих шагов все ajax-запросы, используемые jqGrid, будут получены из локального кэша в течение интервала времени (60 секунд).

Реализация кэширования на стороне сервера со стратегией, более сложной, так как возможно фиксированное время кэшированияв отношении ETags (теги сущностей).Это моя любимая стратегия, но ее реализация относительно сложна (подробности см. Руководство по лучшему способу сохранения параметров фильтрации при использовании ASP.NET MVC 2 и Обработка параллелизма транзакции Sql ).

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

  1. созданиеgrid на той же странице , что и кнопки и другие фильтры из формы, которая определяет параметры jqGrid (см. Как фильтровать данные jqGrid, НЕ используя встроенное поле поиска / фильтра ).
  2. «Перекраска» страницы с формой относительно jQuery.Remove() или jQuery.Empty() и новым ajax запросом.Например, с jQuery("body").Empty() или jQuery("div#main").Empty(), где <div id="main"> находится где-то сверху тела.Затем вы можете заполнить тело страницы (или div с id = "main") вызовом, подобным jQuery("body").load("newPage.htm") или jQuery("div#main").load("newPage.jsp").

Преимущество этих альтернатив в том, что вы будете оставайтесь на той же странице и все данные JavaScript могут быть использованы.Например, вы можете получить старые данные jqGrid из параметра «data», если ваша сетка использует параметр «loadonce: true», а затем создать новый jqGrid, используя значение данных в качестве параметра «data» нового jqGrid.

1 голос
/ 14 сентября 2010

Формы являются частью спецификации HTML, jqGrid не ... почему вы ожидаете, что данные сетки будут кэшироваться?

Тем не менее, если вы используете URL GET для получения данных для сетки,некоторые браузеры, такие как IE, будут кэшировать результаты GET.Вам нужно будет сделать URL уникальным (например, добавив метку времени), чтобы предотвратить кэширование данных.Имейте в виду, однако, что это не будет кэшировать данные во всех браузерах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...