powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Как избавиться от кеширования AJAX-запросов?
11 сообщений из 11, страница 1 из 1
Как избавиться от кеширования AJAX-запросов?
    #34242094
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть обычная ссылка:
Код: plaintext
1.
<a href="javascript: sendEmail();"><img src="images/email.bmp" width= 90  height= 60 /></a>

Реакция на нее:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
function sendEmail()
{
	var url = "<myAJAXservlet>?subAction=sendEmail";
	request.open("GET", url, true);
	request.onreadystatechange = behaviorSendEmail;
	request.send( null );
}
		
function behaviorSendEmail()
{
	 if  (request.readyState ==  4 )
	{
		 if  (request.responseText == "true") window.status = "Message sent";
		 else  window.status = "Sending failed";
	}  else 
		window.status = "Please wait while message formatted and sent";
}

Все обычное, стандартное и рабочее: нажимаем - отсылается ... но только один раз!!
Любое посвторное нажатие, даже после смены страницы, не дает никакого результата - если при первом разе есть какая-то задержка на отсылку сообщения, то при последующих - мгновенная отработка request.readyDtate == 4. При повторном вызове обращения к сервлету уже нет.

Похожая ерунда происходит со страницами: например, onLoad в тэге <body> отрабатывается только один раз при первой загрузке страницы, любое обновление или смена страниц не дает никакого результата - onLoad больше не отрабатывается.

Я так понимаю, что происходит кеширование запросов в пределах одной сессии. Как от этого избавиться?

Спасибо.
...
Рейтинг: 0 / 0
Как избавиться от кеширования AJAX-запросов?
    #34242105
Фотография Penkov Vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
добавить к строке запроса:
Код: plaintext
1.
2.
3.
4.
        function doRequest(url) {
            var lRand = Math.random();
            var rUrl = url + "&rand=" + lRand;
        }
...
Рейтинг: 0 / 0
Как избавиться от кеширования AJAX-запросов?
    #34242316
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блин, ступил ... от метода реализации концепция не меняется: что малое, что большое ...
Работает. Спасибо за наводку.
...
Рейтинг: 0 / 0
Как избавиться от кеширования AJAX-запросов?
    #34243525
LINUXER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
можно проще
req.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");

А заголовки response типа Cache-control и pragma не помогают.
...
Рейтинг: 0 / 0
Как избавиться от кеширования AJAX-запросов?
    #34243912
М.Голованов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LINUXERА заголовки response типа Cache-control и pragma не помогают.

В запросе - естественно, не помогают. Спецификация HTTP не предусматривает таких заголовков в ЗАПРОСАХ.

Браузер же в действительности кэширует НЕ запросы, а ОТВЕТЫ. То есть вы не с того конца начали. Для того, чтобы ответ НЕ кэшировался, ваш сервлет должен послать в ответе соответствующие заголовки. Для HTTP/1.1 браузеров в 100% случаев достаточно послать

Код: plaintext
1.
response.setHeader( "Cache-Control", "no-cache" );
response.setHeader( "Pragma", "no-cache" );
...
Рейтинг: 0 / 0
Как избавиться от кеширования AJAX-запросов?
    #34243931
М.Голованов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Deadyдобавить к строке запроса:
Код: plaintext
1.
2.
3.
4.
        function doRequest(url) {
            var lRand = Math.random();
            var rUrl = url + "&rand=" + lRand;
        }


Очень плохой совет. Хотя и будет работать. Однако

1. Собственно код плохой. Поди разбери со стороны, зачем это сделано. Умный-то поймет, а дурак не догадается. А на сопровождение умных не хватает.

2. Если таких запросов будет несколько, кэш браузера будет забиваться ответами на эти по сути одинаковые, но с точки зрения браузера разные запросы. Браузер, клнечно, не загнется, но зачем заставлять его делать дурную работу?

3. На стороне сервера добавляется работа по экстракции дополнительного параметра запроса. Опять же сервер не загнется, но зачем заставлять его делать дурную работу?

В общем, см. мой пост выше.
...
Рейтинг: 0 / 0
Как избавиться от кеширования AJAX-запросов?
    #34253190
v_777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кеширование при использовании AJAX гораздо чаще мешает, чем помогает. Я его прибил глобально при помощи фильтра

HttpServletResponse myHttpResponse=((HttpServletResponse)response);
myHttpResponse.addHeader( "Cache-Control", "no-cache" );
myHttpResponse.setHeader( "Pragma", "no-cache" );
chain.doFilter(request, myHttpResponse);

Теперь не нужно в каждой jsp думать о заголовках. Мне кажется это удобно.
...
Рейтинг: 0 / 0
Как избавиться от кеширования AJAX-запросов?
    #34253245
LINUXER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
М.Голованов LINUXERА заголовки response типа Cache-control и pragma не помогают.

В запросе - естественно, не помогают. Спецификация HTTP не предусматривает таких заголовков в ЗАПРОСАХ.

Браузер же в действительности кэширует НЕ запросы, а ОТВЕТЫ. То есть вы не с того конца начали. Для того, чтобы ответ НЕ кэшировался, ваш сервлет должен послать в ответе соответствующие заголовки. Для HTTP/1.1 браузеров в 100% случаев достаточно послать

Код: plaintext
1.
response.setHeader( "Cache-Control", "no-cache" );
response.setHeader( "Pragma", "no-cache" );

Ещё бы заголовки RESPONSE помогали в ЗАПРОСАХ
Хотя похоже я просто опечатался в одном из них и не все браузеры дали нужный результат
...
Рейтинг: 0 / 0
Как избавиться от кеширования AJAX-запросов?
    #34253252
LINUXER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
v_777Кеширование при использовании AJAX гораздо чаще мешает, чем помогает. Я его прибил глобально при помощи фильтра

HttpServletResponse myHttpResponse=((HttpServletResponse)response);
myHttpResponse.addHeader( "Cache-Control", "no-cache" );
myHttpResponse.setHeader( "Pragma", "no-cache" );
chain.doFilter(request, myHttpResponse);

Теперь не нужно в каждой jsp думать о заголовках. Мне кажется это удобно.
вообще отказываться от кэширования не хорошо.
Фильтровать выборочно ещё часто проблематичнее, чем писать серверные заголовки каждый раз
Использование "If-Modified-Since" удобно, т к с клиента позволяет указывать что кэшировать, а что нет
...
Рейтинг: 0 / 0
Как избавиться от кеширования AJAX-запросов?
    #34253463
v_777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
To LINUXER
"If-Modified-Since" не поможет, если изменяется не jsp, а данные в базе, которые эта jsp отображает.
Да я и не призываю всех "делай, как я", но в моем приложении действительно кеширование только мешало. А поскольку я уже использовал для аутентификации фильтр (одна точка входа на все приложение), то дописав в него 4 строчки решилась проблема кеширования. Если кому важно гибко решать, что кешировать, а что нет, тут конечно в каждой jsp нужно заголовки крутить.
...
Рейтинг: 0 / 0
Как избавиться от кеширования AJAX-запросов?
    #34254332
М.Голованов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
v_777Кеширование при использовании AJAX гораздо чаще мешает, чем помогает. Я его прибил глобально при помощи фильтра

HttpServletResponse myHttpResponse=((HttpServletResponse)response);
myHttpResponse.addHeader( "Cache-Control", "no-cache" );
myHttpResponse.setHeader( "Pragma", "no-cache" );
chain.doFilter(request, myHttpResponse);

Теперь не нужно в каждой jsp думать о заголовках. Мне кажется это удобно.

Кстати, очень даже правильно. И разумно - поскольку по существу весь контент, генерируемый servlet engine, дниамический. И экономно, постольку не надо писать одно и то же в каждом сервлете / JSP. Как я раньше об этом не подумал?... тем более что фильтр у меня имеет каждое приложение. Спасибо.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Как избавиться от кеширования AJAX-запросов?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]