Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / AJAX request.open("GET", url,... не происходит запрос к серверу. / 8 сообщений из 8, страница 1 из 1
04.05.2006, 09:51
    #33705811
riman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AJAX request.open("GET", url,... не происходит запрос к серверу.
Есть такой javascript:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
script1.js:
function retrieveURL(url){
	var req;
	req=new ActiveXObject("Microsoft.XMLHTTP");
	if(req){
		req.onreadystatechange=processStateChange;
		req.open("GET", url, true);
		req.send();
	}
}
function processStateChange(){
	if(req.readyState== 4 ){ // Complete
		if(req.status== 200 ){ // OK response
			alert("Ajax response:"+req.responseText);
		} else{
			alert("Problem with server response:\n "+req.statusText);
		}
	}
}

и html страничка:
<html>
	<body>
		<script>
			window.onload=function(){
				retrieveURL('/ctx/showProgress.do');
				setTimeout('window.onload()',  1000 );
			}
		</script>
	</body>
</html>

Почему при вызове retrieveURL() реальный запрос на стратсовый экшн проходит только один раз, а все остальные запросы как будто берутся из кэша?
...
Рейтинг: 0 / 0
04.05.2006, 09:54
    #33705821
riman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AJAX request.open("GET", url,... не происходит запрос к серверу.
да, в хтмл страничке конечно есть строка включения script1.js
...
Рейтинг: 0 / 0
04.05.2006, 10:02
    #33705850
А.Грасоff™
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AJAX request.open("GET", url,... не происходит запрос к серверу.
как у тя все... не полюцки. попробуй использовать prototype.js

брать можно тут: http://script.aculo.us/downloads (там просто в поставке идет последняя версия прототайпа)

AJAX Tutorial with Prototype

и вообще, использование прототайпа сэкономит кучу времени.

--
бес потпеси, потому што раз троганъ
...
Рейтинг: 0 / 0
04.05.2006, 10:04
    #33705864
riman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AJAX request.open("GET", url,... не происходит запрос к серверу.
:). Ща попробую.
А ваще - что не правильно в коде?
...
Рейтинг: 0 / 0
04.05.2006, 10:26
    #33705942
riman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AJAX request.open("GET", url,... не происходит запрос к серверу.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
<html>
	<body>
		<script>
			var i= 0 ;
			window.onload=function(){
				retrieveURL('/ctx/showProgress.do?i='+i);
				i++;
				setTimeout('window.onload()',  1000 );
			}
		</script>
	</body>
</html>
ну и что, что криво? Зато в кэш не лезет!
...
Рейтинг: 0 / 0
05.05.2006, 06:20
    #33708700
AciD_v
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AJAX request.open("GET", url,... не происходит запрос к серверу.
rimanПочему при вызове retrieveURL() реальный запрос на стратсовый экшн проходит только один раз, а все остальные запросы как будто берутся из кэша?
попробуй использовать метод POST

Код: plaintext
1.
2.
3.
...
req.open("POST", url, true);
...
...
Рейтинг: 0 / 0
05.05.2006, 07:19
    #33708723
pretender
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AJAX request.open("GET", url,... не происходит запрос к серверу.
Предложенные методы (добавление параметра в строку урла или отправка запроса постом) призваны обойти браузерное кэширование. Мне кажется можно настроить Ваш экнш так, чтобы он явным образом запрещал браузеру кэшировать свой урл. Т.е. чтобы он дописывал в респонс хеадер: HttpServletResponse.setHeader( "Cache-Control", "no-store, no-cache, must-revalidate" ).

Можно кстати сделать фильтр, который будет добавлять этот хеадер во все респонсы Вашего приложения.

Например так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
 import  javax.servlet.Filter;
 import  javax.servlet.FilterChain;
 import  javax.servlet.FilterConfig;
 import  javax.servlet.ServletException;
 import  javax.servlet.ServletRequest;
 import  javax.servlet.ServletResponse;
 import  javax.servlet.http.HttpServletResponse;
 import  javax.servlet.http.HttpServletRequest;
 import  java.io.IOException;

 public   class  CacheFilter  implements  Filter
{    
     public   void  init( FilterConfig filterConfig )  throws  ServletException {}

     public   void  doFilter( ServletRequest request, ServletResponse response, FilterChain filterChain ) 
 throws  IOException, ServletException
    {
        ((HttpServletResponse) response ).setHeader( "Cache-Control", "no-store, no-cache, must-revalidate" );
        filterChain.doFilter( request, response );
    }

     public   void  destroy() {}
} 

Это должно избавить Вас от кэширования урлов на уровне приложения. Мы уже много раз на грабли с кэшированием наступали. Попробуйте должно помочь. Не забудьте настроить фильтр в web.xml.
...
Рейтинг: 0 / 0
05.05.2006, 11:15
    #33709375
riman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AJAX request.open("GET", url,... не происходит запрос к серверу.
О! Спасибо. Через фильтр действительно лучше.
Раньше у меня стояло в жспхах:
Код: plaintext
1.
2.
3.
4.
		<META http-equiv="Content-Type" content="text/html;charset=UTF-8">
		<META http-equiv="Pragma" content="no-cache">
		<META http-equiv="Expires" content="-1">
		<META http-equiv="Content-Style-Type" content="text/css">

я думал что выделенная строка должна была говорить браузеру не кэшировать контент, но на самом деле браузер на эту строку не обращает внимания.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / AJAX request.open("GET", url,... не происходит запрос к серверу. / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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