[gdrcd 5.x] Problemi con script jQuery
[gdrcd 5.x] Problemi con script jQuery postato il 27/03/2012 14:06:33 nel forum programmazione, open source e hosting e modificato da irenes il 27/03/2012 16:29:03
Buongiorno!
Provo a esporvi un mio problemino, sperando possiate aiutarmi e... boh, in realtà più a cercare di capire (mi sento molto secchiona a riguardo).
allora...Ho provato a implementare un piccolo script di jquery in land. L'intenzione è quello di fare aggiornare automaticamente, senza far aggiornare tutta la pagina, un singolo div, che contiene il numero di presenti in land e in una certa chat.
Lo script, molto banale, è questo
<script>
function aggiorna() {
$('#loaddiv').load('presenti_in_chat.inc.php');}
// attivo il metodo setInterval() per aggiornare i contenuti ogni tot secondi
window.setInterval("aggiorna()",10000);
</script>
Ora... ho caricato jquery nell'header, messo il nome del div al punto giusto e... nulla, tutto funziona. QUASI.
Il problema infatti è che, quando "scatta" il tempo di refresh (il numero di secondi impostati), il div si aggiorna correttamente e senza neppure effetti "visivi", ma, nel mentre, per tipo 1-2 secondi, è come se "frezzasse" tutta la land. Se uno scrive si perdono 1-2 battute, i tasti non sono attivi e non funzionano, così come link o form vari... nulla, insomma..
Ora, fermo restando che magari quel che voglio ottenere si potrebbe fare anche in altro modo, aggirando il problema, per mia pura cultura personale chiedo... mi direste dove sbaglio? perchè fa così?
non capisco : ed esiste un metodo/script più efficiente?
grazie in anticipo :)
ps: quello script (e il div) sono piazzati direttamente in main.php
Pagine → 1 2
27/03/2012 16:59:17
non saprei di preciso, ma ti posto come ho risolto io (lavoravo proprio ieri ad una cosa molto simile):
<script type="text/javascript">
$(document).ready(function() {
var refreshId = setInterval(function() {
$("#response").load('miapagina.php');
}, 10000);
$.ajaxSetup({ cache: false });
});
</script>
<div id="response"></div>
la mia funzione parte al caricamento della pagina ma ovviamente puoi cambiare l'evento a piacimento.
per l'ajaxSetup mi sembra di aver letto che fosse un fix ad un problema di internet explorer riguardo a rallentamenti ecc.
Prova a vedere se così funziona meglio :)
27/03/2012 18:21:47
le chiamate ajax sono asincrone per definizione, quindi non dovrebbero affatto bloccare l'intero sito quando vengono eseguite, dovrebbero invece venire eseguite in parallelo, lasciando il sito libero di funzionare.
MA il blocco può accadere se il tuo sito è particolarmente pesante sul browser, che quindi rallenta tutto.
I metodi che ti hanno proposto sopra sono tutti giusti ed equivalenti tra di loro, ma secondo me il tuo problema è legato al fatto che il tuo sito è troppo pesante.
27/03/2012 20:00:28
in effetti, anche applicando le soluzioni propostemi [grazie! *O*] il problema rimane tale e quale.
Posso chiederti cosa intendi per "sito pesante"? Dovrei cercare di snellire php? grafica?
è che mi sembra strano, fra l'altro: non ci sono animazioni flash, nè nulla di particolare. E pure riguardo gli script... boh, proprio il minimo sindacale [pochissimo di più del pacchetto gdrcd base].
E poi, scusate la curiosità, ma
1) se è un problema di sito pesante, perchè, se al posto del div autoaggiornante piazzo un frame non subentrano problemi? (fatto e testato)
2) ammesso che il sito sia pesante e sia per quello... cosa c'entra? Nel senso... non è solo il contenuto del div che si và a ricaricare? perchè frezza tutto?
Leo, specifico per non essere fraintesa: non metto in dubbio quanto tu dici, vorrei solo,... capire, conoscere xD
27/03/2012 23:27:38 e modificato da leoblacksoul il 27/03/2012 23:44:03
Hai provato a vedere cosa accade su diversi browser?
Il sito potrebbe essere pesante perchè magari hai tante immagini grosse (in termini sia di MB che di px). O magari hai del codice javascript che gira a intervalli molto piccoli
visto che se metti il frame risulta più leggero allora deve esserci qualcosa che non quadra. O il tuo pc è particolamente lento, oppure la richiesta AJAX davvero pesa molto sul browser. Può essere il browser. Io in genere non ho mai avuto grossi rallentamenti, tranne quando tengo la land aperta tutto il giorno, dopo 10 ore che sono in chat firefox arriva ad occupare una quantità di memoria tale che ogni richiesta AJAX blocca l'intero browser per un paio di secondi. Ma come ho detto succede dopo 10 ore di chat aperta ininterrottamente.
Sicura di non aver per sbaglio attivato la modalità non-asincrona delle chiamate ajax con $.ajaxSetup?
01/08/2012 13:19:28
riesumo questo post.... più che altro perchè mi sono ritrovata a combattere ancora con una questione XD
allora, io ho questo
<div class="presenti" id="loaddiv"><?php include('presenti_in_chat.inc.php'); ?></div>
e questo
<script>
setInterval(function() {
$("#loaddiv").load(location.href+" #loaddiv>*","");
}, 5000);
</script>
Quello che vorrei ottenere è che - senza i freeze di cui parlavo prima - si aggiorni il div con la lista dei presenti. Ora... così ciò avviene. PEròq uello che accade è che, in chat, mi replica continuamente le scritte presenti. In modo strano però. Nel senso che, effettivamente, le frasi non sono duplicate anche a livello DB, ma solo a livello visivo, per l'utente. Infatti, al primo refresh, tornano le azioni veramente postate.
Mi spiego con un esempio.
In chat vengono postate le azioni
A
B
C
a tenere lo schermo aperto quello che succede è qeusto
A
B
C
A
B
C
A
B
C
e così via.
Però, ad aggiornare manualmente la pagina, torna il regolare
A
B
C.
cosa mi sfuggE?
01/08/2012 13:41:11
LOL che soluzione originale irenes XD
Il tuo problema è probabilmente legato al fatto che il tuo script richiama la pagina stessa...non so come funziona internamente la funzione load ma è possibile che vengano rielaborate tutte le istruzioni eseguite onLoad, non so bene se quelle della nuova o della vecchia pagina.
Sarebbe consigliabile ricaricare solo il blocco che vuoi aggiornare tramite una pagina apposita, piuttosto che ricaricare sè stessa
01/08/2012 13:48:45
leoblacksoul ha scritto: LOL che soluzione originale irenes XD
Il tuo problema è probabilmente legato al fatto che il tuo script richiama la pagina stessa...non so come funziona internamente la funzione load ma è possibile che vengano rielaborate tutte le istruzioni eseguite onLoad, non so bene se quelle della nuova o della vecchia pagina.
Sarebbe consigliabile ricaricare solo il blocco che vuoi aggiornare tramite una pagina apposita, piuttosto che ricaricare sè stessa
quello che non capisco, però, è che la chat e il div da refreshare sono in punti diversi...quindi cosa c'entra la presenza del div refreshante con la duplicazione in chat? <.< mah
comunque, anche io avevo trovato che la soluzione più "esatta" sarebbe quella già suggerita qui
<script type="text/javascript">
$(document).ready(function() {
var refreshId = setInterval(function() {
$("#response").load('miapagina.php');
}, 10000);
$.ajaxSetup({ cache: false });
});
</script>
<div id="response"></div>
il problema è che, mettendo così (al contrario della soluzione postata prima), mi capita sempre quel fastidioso effetto "freeze" per 1-2 secondi, quando il div refresha... che non mi spiego. Dulcis in fundo, peraltro, con la soluzione suddetta, non mi pare manco le dialog xD mi sa che JS e io siamo incompatibili xD
01/08/2012 13:59:41
Che le dialog non compaiano è normale, devi riregistrarle dopo ogni refresh.
Le chat sono coinvolte perchè nella pagina che carichi comunque ci sono, anche se dopo vengono filtrate e probabilmente vengono eseguiti gli script della pagina che carichi
01/08/2012 14:02:35
leoblacksoul ha scritto: Che le dialog non compaiano è normale, devi riregistrarle dopo ogni refresh.
Le chat sono coinvolte perchè nella pagina che carichi comunque ci sono, anche se dopo vengono filtrate e probabilmente vengono eseguiti gli script della pagina che carichi
no no... non compaiono proprio da nessuna parte, MAI, anche negli altri punti, fuori da quel div, dove sono piazzate XD
e, per capire: ma se io dico che nel div X deve caricarmi la pagina "presenti", dove ci sono solo le info sui presenti... perchè mi dici che comunque ci sono anche le chat? per capire, eh! <.<"
01/08/2012 18:19:25
La pagina completa dovrà pure caricarla prima di estrarre solo il div che ti interessa no?
jQuery non credo che faccia l'analisi testuale dei documenti html, dato che la fa già il browser da solo, jQuery carica l'intero documento facendo costruire al browser il relativo albero DOM e poi lo manipola per estrarre solo il div che hai specificato. Ma intanto il browser il parsing dell'intera pagina caricata la fa e mi sa che fa anche partire gli eventi onLoad
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!
Fallen Gods ↗
Neverness to Everness ↗
Imperion ↗
Sea of Conquest ↗
Enlisted ↗
State of Survival ↗
World of the Sea Battle ↗
Tiles Survive ↗
Storie di Agarthi ↗