Как предотвратить кеширование .NET JSON-каналов - PullRequest
4 голосов
/ 09 июня 2011

Я создал простую страницу .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

1011 * Некоторые вещи я безуспешно 1013 * 1 / кэш (!). Ложен в ajaxSetup Ждет»t work.

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

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

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

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

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

Ответы [ 3 ]

10 голосов
/ 09 июня 2011

Перед тем, как сделать getJSON звонок, используйте:

jQuery.ajaxSetup({
   cache: false
});

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

1 голос
/ 09 июня 2011

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

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

0 голосов
/ 11 июня 2011

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

Итак, я добавил список профилактических мер на стороне сервера (Response.ExpiresAbsolute и т. Д.), И он выполнил свою работу.

...