#jquery #.net #json #iis #jsonp
#jquery #.net #json #iis #jsonp
Вопрос:
Я создал страницу simple .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=123amp;callBack=?";
$.getJSON(url, null, function(msg) { etc etc.
Все это работает нормально, за исключением следующего. В моей среде разработки и на моем локальном сервере каждый раз возвращаются свежие данные. Но на производственном веб-сервере данные упорно кэшируются, пока я не переработаю пул приложений IIS (!)
Некоторые вещи, которые я безуспешно пробовал.
1/ cache: false в ajaxSetup не сработал.
2 / Отключил кэширование выходных данных в web.config.
2a/ OutputCache Location=»None» в объявлениях страницы aspx этого не делает.
3/ Добавлены случайные уникальные данные строки запроса к вызову .getJSON (url). Видя, как мы добавляем уникальный параметр обратного вызова к каждому вызову, я предполагаю, что это все равно уже происходило.
Есть идеи, почему мой веб-сервер хранит эти кэшированные файлы приложений / JSON?
РЕДАКТИРОВАТЬ: я просматриваю фактические каналы .aspx по мере их поступления с веб-сервера, и они там кэшируются. Итак, насколько я понимаю, это проблема кэширования веб-сервера и не обязательно проблема кэширования JQUERY.
Ответ №1:
Прежде чем выполнять какие-либо getJSON
вызовы, используйте это:
jQuery.ajaxSetup({
cache: false
});
Вчера я боролся с этой же проблемой около получаса. Я не уверен, почему ручное добавление случайной строки запроса не сработало бы, но это решило проблему для меня. Попадания в кэш были совершенно случайными, пока я не добавил общую настройку выше.
Комментарии:
1. Я пробовал это, но безуспешно. Я внесу правку в свой OP, чтобы указать, что я фактически просматриваю каналы .aspx непосредственно в notepad, и они поступают с сервера в виде кэшированных версий, независимо от того, задействован JQUERY или нет. Возможно, мне также следует повторно пометить это как вопрос IIS.
2. Работает как по волшебству, мой AJAX-запрос больше не кэшируется, и я каждый раз получаю новый результат. Если это не сработает, просто добавьте случайное число в конец запроса (или временную метку), и это будет считаться уникальным запросом, а не извлеченным из кэша.
Ответ №2:
Чтобы уточнить ответ @Stefan, установка значения cache в false позволяет jquery добавить случайную строку запроса, чтобы сделать запрос уникальным.
Пример: myURL.aspx?id=123amp;Обратный вызов =amp;_=13245897565132154878
Ответ №3:
Оказалось, что это действительно было .Страница сервера ASPX, кэширующая данные. При всем внимании к AJAX на стороне клиента я упустил из виду очевидное.
Итак, я добавил список превентивных мер на стороне сервера (Response.ExpiresAbsolute и так далее), и это сделало свое дело.
Комментарии:
1. Ответ на ваш собственный вопрос вполне приемлем. Если вы найдете свой собственный ответ, другие могут извлечь выгоду из того, что вы нашли. Даже можно опубликовать вопрос, чтобы ответить на свой собственный вопрос, если вы думаете, что нашли что-то, что либо трудно найти в обычном режиме, либо отсутствует в SO.
2. не могли бы вы, пожалуйста, объяснить это подробно? Ответ, в котором говорится, что вы сделали «и так далее», на самом деле не помогает