maxru
МИФИст
Pseudo AJAX : проблема с обновлением
js.php
<?php
Header('Pragma: no-cache');
echo "latestnews.innerHTML='Новости за день: 3)Базаев обрезал [...] при помощи взрыва! И подавился бубликом!';";
?>
index.html
<html>
<head>
<title>Fake AJAX</title>
<style>
.news{display:block; background-color: d9d9d9; color: 000000; font-family: Tahoma}
</style>
<script>
function init()
{
// elements creation^
var NewsSpan=document.createElement('span');
NewsSpan.id="latestnews";
NewsSpan.className="news";
NewsSpan.innerHTML="Нажмите \"REFRESH\", чтобы получить последние новости.";
body.appendChild(NewsSpan);
}
function GetJS(path)
{
var old=document.getElementById('Dynamic');
if(old!=null)
{
latestnews.innerHTML="LOADING...";
window.alert('Removing old data!');
body.removeChild(old);
}
var NewJsElement=document.createElement('script');
NewJsElement.src=path+'?cnt='+getjsform.cnt.value;
getjsform.cnt.value+=1;
NewJsElement.type="text/javascript";
NewJsElement.id="Dynamic";
body.appendChild(NewJsElement);
}
</script>
</head>
<body onload="init()" id="body">
<form id="getjsform">
<input type="button" onclick="GetJS('./js.php')" value="REFRESH">
<input type="hidden" id="cnt" value=0>
</form>
</body>
</html>
В чём проблема. Если нажимать "REFRESH" несколько раз, перед этим обновляя надпись в js.php, показывается сообщение, которое было получено первым.
Проблема судя по всему в том, что броузер кеширует скрипт.
Нашел очень неудобное и корявое решение:
с помощью getjsform.cnt.value добавляется число (инкремент) к пути к js.php.
Каждый раз получается разный ЮРЛ, и загружается новое сообщение.
НО! С этим способом связаны некоторые проблемы:
Если перезагрузить страницу, счётчик сбрасывается на 0 и снова начинает показывать с 1го загруженного скрипта!
Есть ли более красивое решение этой проблемы? (XmlHttpRequest не предлагать).
З.Ы. Решение целиком можете не предлагать , лучче ИДЕЮ 8)
js.php
<?php
Header('Pragma: no-cache');
echo "latestnews.innerHTML='Новости за день: 3)Базаев обрезал [...] при помощи взрыва! И подавился бубликом!';";
?>
index.html
<html>
<head>
<title>Fake AJAX</title>
<style>
.news{display:block; background-color: d9d9d9; color: 000000; font-family: Tahoma}
</style>
<script>
function init()
{
// elements creation^
var NewsSpan=document.createElement('span');
NewsSpan.id="latestnews";
NewsSpan.className="news";
NewsSpan.innerHTML="Нажмите \"REFRESH\", чтобы получить последние новости.";
body.appendChild(NewsSpan);
}
function GetJS(path)
{
var old=document.getElementById('Dynamic');
if(old!=null)
{
latestnews.innerHTML="LOADING...";
window.alert('Removing old data!');
body.removeChild(old);
}
var NewJsElement=document.createElement('script');
NewJsElement.src=path+'?cnt='+getjsform.cnt.value;
getjsform.cnt.value+=1;
NewJsElement.type="text/javascript";
NewJsElement.id="Dynamic";
body.appendChild(NewJsElement);
}
</script>
</head>
<body onload="init()" id="body">
<form id="getjsform">
<input type="button" onclick="GetJS('./js.php')" value="REFRESH">
<input type="hidden" id="cnt" value=0>
</form>
</body>
</html>
В чём проблема. Если нажимать "REFRESH" несколько раз, перед этим обновляя надпись в js.php, показывается сообщение, которое было получено первым.
Проблема судя по всему в том, что броузер кеширует скрипт.
Нашел очень неудобное и корявое решение:
с помощью getjsform.cnt.value добавляется число (инкремент) к пути к js.php.
Каждый раз получается разный ЮРЛ, и загружается новое сообщение.
НО! С этим способом связаны некоторые проблемы:
Если перезагрузить страницу, счётчик сбрасывается на 0 и снова начинает показывать с 1го загруженного скрипта!
Есть ли более красивое решение этой проблемы? (XmlHttpRequest не предлагать).
З.Ы. Решение целиком можете не предлагать , лучче ИДЕЮ 8)