Только для сообщения Firefox и Chrome рассматривают весь запрос Ajax как non-cachable. IE (все версии) рассматривает вызов Ajax как другой веб-запрос. Вот почему Вы видите это поведение.
, Как вынудить IE загрузить данные в каждом запросе:
Код:
public class NoCacheAttribute : ActionFilterAttribute
{
public override void OnActionExecuted(ActionExecutedContext context)
{
context.HttpContext.Response.Cache.SetCacheability(HttpCacheability.NoCache);
}
}
Это - то, как это работало на меня...
$.ajaxSetup({ cache: false });
$.getJSON("/MyQueryUrl",function(data,item) {
// do stuff with callback data
$.ajaxSetup({ cache: true });
});
Спасибо Кент для Вашего ответа. Используя $ .ajax (' {кэш: нет} '); работавший отлично. [редактирование]
Или по крайней мере я думал, что сделал. Кажется, что $ jQuery .getJSON не читает изменений, внесенных в $ .ajax объект.
решение, которое закончило тем, что работало, состояло в том, чтобы добавить новый параметр вручную
var noCache = Date();
$.getJSON("/somepage/someaction", { "noCache": noCache }, Callback);
, разрешение даты только к минуте; который эффективно означает это решение все еще кэши в течение максимум одной минуты. Это приемлемо в моих целях.
Вы, возможно, должны отправить прерыватель кэша.
я рекомендовал бы использовать $ .ajax ({кэш: нет}) на всякий случай (добавляет случайный суффикс к получить запросу)
(я склонен использовать $ .ajax везде в эти дни, более tuneable)
Если вы используете 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");
}
Я решил ту же проблему, поместив следующий атрибут в действие в контроллере:
[OutputCache(Duration = 0, VaryByParam = "None")]