Как предотвратить кеширование каналов .NET JSON

Я создал простую страницу .aspx, которая запрашивает в базе данных некоторые оперативные данные, а затем возвращает JSONP (или, наконец, JSONP-подобный) поток Content-Type application/json; charset=utf-8

Вот формат вывода, более или менее:

jsonp1307643489579([
  ["12345","Text Here","99999","More Text Here","True","False","7/31","1"...],
  ["12345","Text Here","99999","More Text There",...]
]

Затем следует вызов JQuery .getJSON:

var url = "myURL.aspx?id=123&callBack=?";
$.getJSON(url, null, function(msg) { etc etc.

Все работает нормально, кроме следующего. В моей среде разработки и на моем локальном сервере свежие данные возвращаются каждый раз. Но на рабочем веб-сервере данные упрямо кэшируются, пока я не переработаю пул приложений IIS (!)

Некоторые вещи я пробовал без успеха.

1/кеш: false в ajaxSetup не сработало.

2/Отключено кэширование вывода в web.config.

2a/ OutputCache Location="None" в объявлениях страницы aspx этого не делает.

3/Добавлены случайные уникальные данные строки запроса в вызов .getJSON(url). Учитывая, что мы добавляем уникальный параметр обратного вызова к каждому вызову, я думаю, что это уже происходило в любом случае.

Есть идеи, почему мой веб-сервер держит эти кэшированные файлы приложений/JSON?

РЕДАКТИРОВАТЬ: я просматриваю фактические каналы .aspx, поступающие с веб-сервера, и они кэшируются там. Насколько я понимаю, это проблема кэширования веб-сервера, а не обязательно проблема кэширования JQUERY.


person LesterDove    schedule 09.06.2011    source источник


Ответы (3)


Прежде чем делать какие-либо getJSON вызовы, используйте это:

jQuery.ajaxSetup({
   cache: false
});

Я вчера боролся с этой же проблемой около получаса. Я не уверен, почему ручное добавление случайной строки запроса не сработает, но это решило проблему для меня. Попадания в кэш были совершенно случайными, пока я не добавил общую настройку выше.

person Stefan Kendall    schedule 09.06.2011
comment
Я пробовал это, но безуспешно. Я внесу изменения в свой OP, чтобы указать, что на самом деле я просматриваю каналы .aspx непосредственно в блокноте, и они поступают с сервера в виде кэшированных версий, независимо от того, задействован ли JQUERY. Возможно, мне следует переименовать это как вопрос IIS. - person LesterDove; 09.06.2011
comment
Работает как шарм, мой запрос AJAX больше не кэшируется, и я каждый раз получаю новый результат. Если это не сработает, просто добавьте случайное число в конец запроса (или временную метку), и он будет считаться уникальным запросом, а не извлеченным из кеша. - person Andreas; 07.05.2012

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

Пример: myURL.aspx?id=123&callBack=&_=13245897565132154878

person kroehre    schedule 09.06.2011

Оказалось, что это действительно была страница сервера .ASPX, кэширующая данные. Несмотря на все внимание к AJAX на стороне клиента, я упустил из виду очевидное.

Поэтому я добавил ряд превентивных мер на стороне сервера (Response.ExpiresAbsolute и т. д.), и это сработало.

person LesterDove    schedule 11.06.2011
comment
Отвечать на свой вопрос вполне приемлемо. Если вы найдете свой собственный ответ, другим будет полезно то, что вы нашли. Можно даже опубликовать вопрос, чтобы ответить на свой собственный вопрос, если вы думаете, что нашли что-то, что либо трудно найти в обычном режиме, либо нет на SO. - person Stefan Kendall; 11.09.2011
comment
не могли бы вы объяснить это подробно? Ответ, говорящий мне, что вы сделали и так далее, на самом деле не помогает - person spankmaster79; 02.03.2015