$ .getJSON возвращающий кэшированные данные в IE8

103
задан RAM 19 July 2013 в 20:49
поделиться

6 ответов

Только для сообщения Firefox и Chrome рассматривают весь запрос Ajax как non-cachable. IE (все версии) рассматривает вызов Ajax как другой веб-запрос. Вот почему Вы видите это поведение.
, Как вынудить IE загрузить данные в каждом запросе:

  • , Поскольку Вы сказали, используйте 'кэш', или 'nocache' опция в JQuery
  • Добавляют случайный параметр к запросу (ужасный, но работы:))
  • На стороне сервера, набор cachability (например, использование атрибута, посмотрите ниже)

Код:

public class NoCacheAttribute : ActionFilterAttribute
{
    public override void OnActionExecuted(ActionExecutedContext context)
    {
        context.HttpContext.Response.Cache.SetCacheability(HttpCacheability.NoCache);
    }
}
67
ответ дан Nico 24 November 2019 в 04:18
поделиться

Это - то, как это работало на меня...

$.ajaxSetup({ cache: false });
$.getJSON("/MyQueryUrl",function(data,item) {
     // do stuff with callback data
     $.ajaxSetup({ cache: true });
   });
106
ответ дан Matt Handy 24 November 2019 в 04:18
поделиться

Спасибо Кент для Вашего ответа. Используя $ .ajax (' {кэш: нет} '); работавший отлично. [редактирование]

Или по крайней мере я думал, что сделал. Кажется, что $ jQuery .getJSON не читает изменений, внесенных в $ .ajax объект.

решение, которое закончило тем, что работало, состояло в том, чтобы добавить новый параметр вручную

var noCache = Date();
$.getJSON("/somepage/someaction", { "noCache": noCache }, Callback);

, разрешение даты только к минуте; который эффективно означает это решение все еще кэши в течение максимум одной минуты. Это приемлемо в моих целях.

16
ответ дан Andrew Harry 24 November 2019 в 04:18
поделиться

Вы, возможно, должны отправить прерыватель кэша.

я рекомендовал бы использовать $ .ajax ({кэш: нет}) на всякий случай (добавляет случайный суффикс к получить запросу)

(я склонен использовать $ .ajax везде в эти дни, более tuneable)

2
ответ дан Kent Fredric 24 November 2019 в 04:18
поделиться

Если вы используете ASP.net MVC, рассмотрите возможность добавления метода расширения, чтобы легко реализовать отсутствие кеширования, например:

    public static void NoCache(this HttpResponse Response)
    {
        Response.Cache.SetNoStore();
        Response.Cache.SetExpires(DateTime.MinValue);
        Response.Cache.SetCacheability(HttpCacheability.NoCache);
        Response.Cache.SetValidUntilExpires(false);

        Response.Expires = -1;
        Response.ExpiresAbsolute = DateTime.MinValue;
        Response.AddHeader("Cache-Control", "no-cache");
        Response.AddHeader("Pragma", "no-cache");
    }
4
ответ дан 24 November 2019 в 04:18
поделиться

Я решил ту же проблему, поместив следующий атрибут в действие в контроллере:

[OutputCache(Duration = 0, VaryByParam = "None")]
11
ответ дан 24 November 2019 в 04:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: