Problema: Script Ajax
Problema: Script Ajax postato il 05/11/2008 14:13:47 nel forum programmazione, open source e hosting e modificato da blancks il 05/11/2008 14:17:04
Ho creato il seguente codice per il refresh di una pagina in un div:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<link href="css/base.css" rel="stylesheet" type="text/css" />
<title>Pagina</title>
<script type="text/javascript">
var http = false;
function refresh_div(pag){
if(navigator.appName == "Microsoft Internet Explorer"){
http = new ActiveXObject("Microsoft.XMLHTTP");
}else{
http = new XMLHttpRequest();
if(http.overrideMimeType){
http.overrideMimeType('text/xml');
}
}
http.open('GET', pag+'.php', true);
http.onreadystatechange = function() {
if(http.readyState == 4) {
document.getElementById('elenco_div').innerHTML = http.responseText;
setTimeout(refresh_div(pag), 5000)
}
}
http.send(null);
}
window.onload = refresh_div('elenco');
</script>
<style type="text/css">
#elenco_div{margin:60px auto; width:100px; height:200px; background-color:#CCCCCC; border:solid 1px #000000;}
</style>
</head>
<body>
<div id="elenco_div"></div>
</body>
</html>
In pratica questo codice dovrebbe refresharmi una pagina ogni 5 secondi all'interno di un div, la pagina caricata in questo div ha all'interno un link che mi richimama nuovamente la funzione, tuttavia cambiando il parametro per far si che essa mi ricarichi un altra pagina in quello stesso div ( refresh_div('pagina_2'); per fare un esempio ).
Senza il settimeout è perfetto, la chiamata asincrona funziona alla perfezione, se invece lo aggiungo.. indipendentmente dal tempo che ho settato essa mi viene ricaricata con un tempo di refresh praticamente nullo ( per dire.. ho messo un <?=mt_rand(0,20)?> in elenco.php per "notare" il refresh.. ho visto quel numeretto variare ad una velocità impressionante)
Qualcuno saprebbe illuminarmi sul perchè accade, ed eventualmente suggerirmi una soluzione ?_?
ps: ringrazio chiunque interverrà per la consulenza ;-)
Pagine → 1 2
05/11/2008 15:00:41
cicciokr ha scritto: bhe prova ad aumentare il tempo di refresh.. setTimeout(refresh_div(pag), 5000) metti setTimeout(refresh_div(pag), 25000)...
Soluzione ovvia: già provato ma inutile.
Indipendentemente dal tempo impostato il refresh avviene al millisecondo.
05/11/2008 18:48:54 e modificato da blancks il 05/11/2008 18:49:15
cicciokr ha scritto: quoto faber.. usa gli iframe, con una buoan impostazione css farai un ottimo lavoro.. anche se devi stare attento che alcune proprietà con ie si vedono in altro modo..
Ah vabe, quello è il minimo creare una pagina interoperabile validata al W3C.
Più che altro mi interessava sapere perchè non funzionava come previsto lo script per un livello di conoscenza personale.
Ad ogni modo grazie dei consigli ;-)
05/11/2008 20:17:46
blancks ha scritto: Ho creato il seguente codice per il refresh di una pagina in un div:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<link href="css/base.css" rel="stylesheet" type="text/css" />
<title>Pagina</title>
<script type="text/javascript">
var http = false;
function refresh_div(pag){
if(navigator.appName == "Microsoft Internet Explorer"){
http = new ActiveXObject("Microsoft.XMLHTTP");
}else{
http = new XMLHttpRequest();
if(http.overrideMimeType){
http.overrideMimeType('text/xml');
}
}
http.open('GET', pag+'.php', true);
http.onreadystatechange = function() {
if(http.readyState == 4) {
document.getElementById('elenco_div').innerHTML = http.responseText;
setTimeout(refresh_div(pag), 5000)
}
}
http.send(null);
}
window.onload = refresh_div('elenco');
</script>
<style type="text/css">
#elenco_div{margin:60px auto; width:100px; height:200px; background-color:#CCCCCC; border:solid 1px #000000;}
</style>
</head>
<body>
<div id="elenco_div"></div>
</body>
</html>
In pratica questo codice dovrebbe refresharmi una pagina ogni 5 secondi all'interno di un div, la pagina caricata in questo div ha all'interno un link che mi richimama nuovamente la funzione, tuttavia cambiando il parametro per far si che essa mi ricarichi un altra pagina in quello stesso div ( refresh_div('pagina_2'); per fare un esempio ).
Senza il settimeout è perfetto, la chiamata asincrona funziona alla perfezione, se invece lo aggiungo.. indipendentmente dal tempo che ho settato essa mi viene ricaricata con un tempo di refresh praticamente nullo ( per dire.. ho messo un <?=mt_rand(0,20)?> in elenco.php per "notare" il refresh.. ho visto quel numeretto variare ad una velocità impressionante)
Qualcuno saprebbe illuminarmi sul perchè accade, ed eventualmente suggerirmi una soluzione ?_?
ps: ringrazio chiunque interverrà per la consulenza ;-)
invece di settimeout usa setinterval
05/11/2008 21:16:53
niente neanche con il setinterval()
05/11/2008 21:57:03
Tra l'altro sembrerà strano ma con setTimeout(); bisogna mettere gli apici anche al numero. Almeno a me ha dato sempre errore se non mettevo gli apici.
05/11/2008 23:23:09
Ho provato nella maniera in cui me l'hai risistemato kinley e niente: non avviene il refresh anche se la chiamata asincrona per cambiare pagina funziona bene :S
06/11/2008 00:33:01
kinley ha scritto: si errore mio non viene mai inizializzata la funzione Refresh_div(pag) ovvero da nessuna parte la richiamavo
quindi o aggiungi il window.onload
oppure sotto http = false; inserisci un setTimeout (in questo devi mantenere il set dentro alla funzione che devi convertire in setTimeout perchè è sufficiente) o un setInterval (in questo modo togli quello dentro alla funzione) che faccia partire la function Refresh_div dandogli tu come "pag" tu un valore iniziale predefinito
tipo "home" quello che te pare diciamo il valore di default che deve avere appena accede alla pagina .
dimenticavo
ti sconsiglio di usare eventi come onload perchè in questo caso potrebbe non funzionare comunque perchè prima di tutto eseguirebbe lo script che andrebbe a mettere il risultato in un div che ancora non è stato creato dal sistema. Quindi a mio avviso mettere un set interval a 5 s all'inizio è la cosa migliore in modo che la pagina anche con grafica dovrebbe essere completamente caricata e quindi dopo il document.getElementById riesce a trovare il div caricato
No, non in quel senso, me ne ero accorto che non inizializzavi la funzione da nessuna parte e l'ho fatto io xD (un po di intelligenza ce l'ho eh u.u)
Il punto è che non se lo fila proprio il refresh XD
06/11/2008 15:06:12
ok, il problema è questo:
setInterval('refresh_div(pag)', 5000);
Che assolutamente non vuole andare, tranne nel caso in cui io non scriva così
setInterval('refresh_div()', 5000);
in poche parole non posso inviare la variabile con la funzione altrimenti non mi riesegue lo script.
Il punto è che a me serve per poter cambiare pagina da ricaricare in quel div con un click.
Suggerimenti su come posso scriverlo in modo che me lo accetti :S ?
06/11/2008 19:24:55
Bene, adesso va il refresh ed è tutto ok.. MA (essi, c'è un ma ç_ç)
Quando avvio la funzione passandogli l'info della seconda pagina da ricaricare temo che si accoda alla prima già in esecuzione.
Perchè invece di refreshare solo la seconda pagina, mi viene ricaricata anche quella di partenza, poi di nuovo quella e poi ancora quella di partenza e se clicco nuovamente il processo è più rapido :S
mai una che me ne vada bene al primo colpo in ambito javascript oh XD
06/11/2008 22:00:46
No, non si tratta solo di una richiesta asincrona per caricare una pagina in un div:
in pratica ho un elenco piccolino in basso a sinistra che necessita di aggiornarsi per mostrare ogni volta i risultati "nuovi" all'interno di quell'elenco ci sarà un link che mi richiama la funzione in modo che però refreshi un altra pagina simile.
Il punto è che devono refreshare
Discussione seguita da
Pagine → 1 2
Rispondi alla Discussione Segui Discussione Inoltra Discussione Forum Programmazione, Open Source e Hosting Elenco Forum
Articoli, Interviste e altre Risorse!
Sea of Conquest ↗
Imperion ↗
Fallen Gods ↗
Tibia ↗
CRSED: F.O.A.D. ↗
Project Entropy ↗
Storie di Agarthi ↗
Tiles Survive ↗
RAID Shadow Legends ↗