Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    25

    Uno script che aggiorna una serie di immagini a cadenze diverse

    Riposto qui il messaggio del post che mi è stato chiuso per "mediocrità di titolo" ...
    In sostanza avrei bisogno solo di capire dove sta l'errore di sintassi.

    Ciao a tutti.
    Sto usando la funzione setinterval per far partire in maniera cadenzata un'altra funzione che mi ripesca un'immagine direttamente dal sito e non dalla cache ( si tratta dell'immagine di una webcam).

    La funzione di partenza (funzionante ) è questa:

    <SCRIPT LANGUAGE="JavaScript">
    <!--
    function aggFoto() {
    t = new Date();
    document.getElementById('webcam').src='http://www.xxx.it/webcam1.jpg?t='+t.getTime();
    }
    //-->
    </SCRIPT>

    che faccio partire al load della pagina :
    <BODY onload="setInterval('aggFoto()',10000);">

    Adesso vi espongo il mio problema:

    A partire da questa soluzione dovrei aggiornare una serie di immagini e non piu una sola.
    Allora ho dotato la funzione aggFoto di 2 argomenti (indirizzo e id dell'elemento):

    <SCRIPT LANGUAGE="JavaScript">
    <!--
    function aggFoto(maddr, wbc) {
    t = new Date();
    document.getElementById(wbc).src="'"+maddr+"'" +t.getTime();
    }
    //-->
    </SCRIPT>

    Ebbene ho guardato e riguardato la funzione, provando a sistemare le virgolette ma continua a darmi errore. Potete aiutarmi ?
    Grazie in anticipo a tutti. Ciao

  2. #2
    Utente bannato
    Registrato dal
    Dec 2008
    Messaggi
    78

    Query String

    da:
    document.getElementById('webcam').src='http://www.xxx.it/webcam1.jpg?t='+t.getTime();

    Una volta ... dotato la funzione aggFoto di 2 argomenti (indirizzo e id dell'elemento):
    mi dai:
    function aggFoto(maddr, wbc)
    e:
    document.getElementById(wbc).src="'"+maddr+"'" +t.getTime();

    Ma il "blocchetto" ?t=

    o arriva con maddr

    o bisogna fare così:

    document.getElementById(wbc).src="" +maddr+ "?t=" +t.getTime();

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    25

    Re

    Ho istallato Firebug 1.3 per firefox e mi restituisce questo errore:

    useless setInterval call(missing quotes around argument?)

    su:
    function onload(event) {
    setInterval(aggFoto("http://www.xxx.com/foto1.jpg", "webcam1"), 10000);
    }

    ( che poi sarebbe:
    <BODY onload="setInterval('aggFoto('http://www.xxx.com/foto1.jpg', 'webcam1')',10000);">

    Quindi l'errore di sintassi ( o il primo della serie) sta qui!

    Quindi cosa fare?

    Ma il "blocchetto" ?t=
    Enzo, come hai ben capito glielo faccio arrivare con la variabile maddr

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    25
    function aggFoto(maddr, wbc) {
    t = new Date();
    document.getElementById(wbc).src="'"+maddr+"'" +t.getTime();
    Sembra che il problema stia proprio nella funzione citata. Infatti i parametri degli argomenti vengono passati correttamente.
    Comunque ho sistemato la standardizzazione dell'argomento "maddr"(indirizzo immagine) che prima passava anche il blocchetto "?t=" . Adesso il blocchetto l'ho inserito nell'espressione come di seguito riportato:

    document.getElementById(wbc).src = maddr + "?t=" + "'" + t.getTime();

    Beh, la funzione ancora nn va. L'immagine non viene aggiornata. Quindi spero sempre che qualcuno dia qualche spunto di riflessione. Ciao

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    25

    Problema risolto

    Non che abbia ricevuto qualche suggerimento o intervento costruttivo in questo forum, anzi qualche tentativo di offesa "vastasa" (si dice al mio paese), ed un intimazione ad utilizzare un titolo appropriato e non generico (come da regolamento) da parte dei moderatori, i quali, mi hanno chiuso il post e costretto ad un copia-incolla burocratico all'italiana.
    Ma i contenuti, l'utilità di questo forum???
    L'aiuto che mi è venuto?

    NULLI
    NULLI


    Vabbè, saranno tutti impegnati a qualcosa... in qualche utile discussione...sarà una domanda troppo banale , la mia. I dotti del forum non mi avranno neppure calcolato...

    Allora non mi rimaneva che tentare e ritentare con i miei mezzi. Non ho tempo per chiedere aiuto in un altro forum. Vediamo che ci esce...

    Tento e scrivo i risultati in questo forum
    Nessun intervento
    Ritento e riscrivo i risultati
    Nessun intervento

    Oggi ho risolto il problema e scrivo qui la risposta perchè qualcun altro che dovesse avere i problemi che ho avuti io li bypassi con facilità.

    Il problema stava nella sintassi con cui scrivevo il metodo setInterval

    questo ha due configurazioni
    una semplice: setinterval(nomefunzione, TempoRitardo)
    una piu complessa: setinterval(nomefunzione, TempoRitardo, parametri_da_passare_a_funzione)

    Io avevo la necessità di passare alla funzione un parametro ( prima erano due ma poi ho semplificato perche il secondo potevo ricavarmelo attraverso il primo) e, passando, attraverso setInterval, il nome della funzione tra virgolette e con i parametri all'interno delle parentesi, ottenevo un errore che mi bloccava il loop per l'aggiornamento cadenzato delle immagini. In sostanza avevo provato:

    setInterval('aggFoto(param1)',10000) ---> ERRORE
    setInterval(aggFoto('param1'),10000) ---> ERRORE

    Nella buio totale :master: ho studiato meglio la definizione del metodo e trovato nella seconda configurazione la soluzione del problema. La sintassi corretta è:

    setInterval(aggFoto,10000,'param1') ---> FUNZIONA

    La funzione va scritta senza virgolette e parentesi ( per es. aggFoto() non va bene )
    mentre i parametri vanno tra virgolette.

    Okkey, il dado è tratto, la mia pagina funziona perfettamente e passo oltre ad un altro problema. Non me ne vogliano coloro che usualmente scrivono in questo forum se non li ringrazio. Anzi porgo loro le mie ( a dovutissima distanza, non volendo provocare loro ulteriore bassezza di istinti animaleschi

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    25

    Perdere la battaglia non vuol dire perdere la guerra

    setInterval(aggFoto,10000,'param1')
    Parto da questa auto citazione dall'ultimo mio intervento ( ma questo è un 3ad tutto marzulliano...a buon intenditore :rollo: ). In realtà inserendo il codice nella mia pagina web avevo trascurato il test sui vari browsers, limitandomi ad utilizzare il caro mozilla. Li, come da manuale, il metodo funzionava alla grande.

    In realtà, già andando avanti mi ero reso conto che il valore della variabile "maddr" non era stabile. Ciò perche dalla funzione di partenza avevo tolto l'argomento maddr, passando, cosi solo l'argomento "wbc" ( id dell'immagine) dal quale avevo intenzione di ricavarmi l'src. Ma in questo caso, per evitare di richiamare l'immagine dalla cache, aggiungevo all'src di partenza un suffisso variabile legato alla data, per cui lo stesso src dell'immagine mutava e al successivo loop, richiamando l'src dell'elemento, avrei ottenuto un src già modificato al quale si aggiungeva un ulteriore pezzo di suffisso, con un processo reiterato che portava la stringa dell'src a crescere all'infinito.

    Funzione scritta originariamente
    function aggFoto(maddr, wbc) {
    t = new Date();
    document.getElementById(wbc).src="'"+maddr+"'" +t.getTime();
    }

    Funzione modificata
    function aggFoto(wbc) {
    maddr = document.getElementById(wbc).src;
    t = new Date();
    mtxt = maddr + "?t=" + t.getTime();
    document.getElementById(wbc).src = mtxt;
    }
    avevo notato, senza rendermi conto specificamente del problema ( che poi dirò) che passare un solo argomento al metodo setInterval era meglio interpretato rispetto al caso del passaggio di piu argomenti. Poi, arresomi dinnanzi all'evidenza e per evitare di allungare il codice con regular expressions etc etc, ho deciso di trovare una soluzione passando direttamente io l'src ( quindi passando due argomenti).


    Cosi ero arrivato alla soluzione del mio intervento precedente ( alla prima riga di quest'ultimo mio intervento) con l'accortezza di inserire a partire dal terzo posto la lista degli argomenti. Infatti era questa la definizione stessa del metodo ( o meglio una delle due prevalenti):

    setInterval(functionReference:Function, interval, [param1:Object, param2, ..., paramN])

    Cosi arriviamo al cuore di questo mio ultimo intervento.
    Ebbene, con grandissima mia sorpresa, quando già consideravo vinte battaglia e guerra, mi sono accorto che il test era OK sul mozilla, ma non sull'InternetExplorer. VVoVe:
    Disperazione!!!
    Avevo controllata e corretta, ricontrollata e ricorretta la sintassi. Andava bene. Cosa fare? Cosa non andava?
    Avevo cercato ovunque. Anche qui su HTML.it avevo trovato un tentativo parziale di risolvere tale problema

    Soluzione di Xinod e fcaldera

    ma la soluzione si limitava all'utilizzo di setInterval con una funzione ad un solo argomento.

    Insomma dopo un po di ulteriori ricerche ecco l'illuminazione:
    SEMPLICEMENTE i metodi setInterval e setTimeout non funzionano allo stesso modo per l'IE. La definizione è diversa. Infatti quando lavoriamo con L'IE il terzo parametro del metodo non è l'elenco opzionale degli argomenti della funzione da cadenzare ma l'indicazione (opzionale) del tipo di linguaggio di script ( JS o VB ).
    Allora, scoperto l'inghippo, come fare per aggirarlo?
    Ho pensato a due soluzioni:

    Soluzione 1: passo un solo argomento che è la combinazione dei due separati da un carattere particolare e poi splitto all'interno della funzione ricavandomi gli argomenti di partenza

    Soluzione 2 ( secondo me più pulita): utilizzo una funzione anonima function() che assegno alla (proprietà) funzione aggFoto con i diversi argomenti che voglio trasferire.
    Un po come quando si lavora con l'assegnazione degli "event handlers"

    Ecco, dunque la soluzione:

    function (){aggFoto (maddr, wbc); }

    per cui, con riferimento ai metodi setInterval e settimer:

    Element.onevent ="setInterval( function() { aggFoto('id','src'); }, cadenza)"

    Con questo stratagemma anche il browser dello zio Bill risponderà bene.

    Un'ultima puntualizzazione.
    Anche se lo stratagemme funziona bene anche con mozilla, è bene differenziare le funzioni per i diversi tipi di browsers.


    Saluti

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    25

    Chiudo

    Beh, ogni tanto tornero qui dentro a farmi una domanda e a darmi una risposta.
    Grazie a me stesso per la perseveranza e l'impegno nell'aiutarmi

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.