Jak696
11-11-2009, 09:07
buongiorno a tutti!
sto facendo qualche test sul mantenere aperto un canale con il server... e ci sto anche riuscendo, ma c'è un problema che non riesco proprio a capire :muro:
il codice lato client (HTML e Javascript) è il seguente:
[...]
<body>
<div id="log" style="width: 450px; height: 200px; border: 1px solid black;"></div>
<br/><input type="text" value="default" id="parameter"/>
<input type="button" onclick="connServ();" value="richiedi pagina"/>
</body>
<script type="text/javascript">
var async = new XMLHttpRequest();
function connServ(){
param = "backend.php?pass=" + document.getElementById("parameter").value;
async.open("get", param, true);
async.setRequestHeader("connection", "close");
async.send(null);
}
async.onreadystatechange = function() {
if (async.readyState == 4){
if(async.status == 200){
respo = async.responseText;
updateDiv(respo);
}
else{
respo = "Richiesta fallita!<br/>";
updateDiv(respo);
}
}
}
function updateDiv(add){
document.getElementById("log").innerHTML += add;
}
</script>
[...]
mentre la pagina "backend.php" lato server è uno script così:
<?php
echo str_repeat(' ', 1024);
flush();
while(true){
set_time_limit(20);
echo 'OK - ' . $_GET['pass'] . ' at ' . date("h-i-s") . '<br/>';
flush();
sleep(3);
}
?>
dove sta il problema?
l'output del server non compare, ma so che arriva sul client.
se lo lascio in esecuzione un po', al momento in cui premo F5 per fare il refresh della pagina compare per una frazione di secondo (finché non fa il refresh vero e proprio) tutto l'output nel <div>.
inoltre, includendo lo script direttamente in una pagina html (e non in una chiamata ajax) e richiamando il tutto con una cosa del tipo "backend.php?pass=test" il tutto funziona regolarmente, ogni 3 secondi stampa la mia stringa:
OK - test at 10-05-53
OK - test at 10-05-56
OK - test at 10-05-59
sembra proprio che per qualche strano motivo non aggiorni la grafica della pagina, nonostante io glielo ordini esplicitamente... dove sbaglio?
sto facendo qualche test sul mantenere aperto un canale con il server... e ci sto anche riuscendo, ma c'è un problema che non riesco proprio a capire :muro:
il codice lato client (HTML e Javascript) è il seguente:
[...]
<body>
<div id="log" style="width: 450px; height: 200px; border: 1px solid black;"></div>
<br/><input type="text" value="default" id="parameter"/>
<input type="button" onclick="connServ();" value="richiedi pagina"/>
</body>
<script type="text/javascript">
var async = new XMLHttpRequest();
function connServ(){
param = "backend.php?pass=" + document.getElementById("parameter").value;
async.open("get", param, true);
async.setRequestHeader("connection", "close");
async.send(null);
}
async.onreadystatechange = function() {
if (async.readyState == 4){
if(async.status == 200){
respo = async.responseText;
updateDiv(respo);
}
else{
respo = "Richiesta fallita!<br/>";
updateDiv(respo);
}
}
}
function updateDiv(add){
document.getElementById("log").innerHTML += add;
}
</script>
[...]
mentre la pagina "backend.php" lato server è uno script così:
<?php
echo str_repeat(' ', 1024);
flush();
while(true){
set_time_limit(20);
echo 'OK - ' . $_GET['pass'] . ' at ' . date("h-i-s") . '<br/>';
flush();
sleep(3);
}
?>
dove sta il problema?
l'output del server non compare, ma so che arriva sul client.
se lo lascio in esecuzione un po', al momento in cui premo F5 per fare il refresh della pagina compare per una frazione di secondo (finché non fa il refresh vero e proprio) tutto l'output nel <div>.
inoltre, includendo lo script direttamente in una pagina html (e non in una chiamata ajax) e richiamando il tutto con una cosa del tipo "backend.php?pass=test" il tutto funziona regolarmente, ogni 3 secondi stampa la mia stringa:
OK - test at 10-05-53
OK - test at 10-05-56
OK - test at 10-05-59
sembra proprio che per qualche strano motivo non aggiorni la grafica della pagina, nonostante io glielo ordini esplicitamente... dove sbaglio?