Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    Eseguire script su condizione

    Ragazzi buonasera.. vorrei eseguire questo script ogni 5 secondi solo se le due variabili sono diverse.se elimino la parte della condizione lo script funziona regolarmente altrimenti non succede nulla


    codice:
    var myTimer = setInterval(function(){ 
        if ($_SESSION['id2']!=$_SESSION['id1']) 
     $.ajax({url:"lettura_dati_db.php", success: function(result){ 
                $("#divrisposta").html(result); 
            } 
    });}, 5000);
    Ultima modifica di ciro78; 04-09-2021 a 12:20 Motivo: tag code

  2. #2
    Moderatore di Javascript L'avatar di ciro78
    Registrato dal
    Sep 2000
    residenza
    Napoli
    Messaggi
    8,505
    ciao Gaetano,
    rinnovo l'invito ad utilizzare il tag code così come da regolamento.
    Ciro Marotta - Programmatore JAVA - PHP
    Preferisco un fallimento alle mie condizioni che un successo alle condizioni altrui.


  3. #3
    Utente di HTML.it L'avatar di ninja72
    Registrato dal
    May 2020
    residenza
    -
    Messaggi
    319
    Vista cosi sembra sbagliata la logica, la funzione myTimer non dovrebbe stare all'interno della funzione dove controlli il result ? Il controllo logico con if potresti delegarlo a PHP (creando un file dedicato es. session-check.php)che nel qual caso potrebbe ritornare un oggetto/json con result:true/false per poi essere controllato all'interno della funzione dove ti viene restituito il result in js, verificato il valore fai partire o meno la funzione myTimer.

  4. #4
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,675
    Ciao, a prescindere dalla logica, chiarisci cosa dovrebbe restituire, lato client, la parte di codice PHP.

    Le due variabili $_SESSION['id2'] e $_SESSION['id1'], una volta elaborate in HTML, che tipo di valori dovrebbero essere? numerici, booleani, stringhe?

    Se fossero stringhe allora devi racchiuderli opportunamente tra apici. Può essere questo il problema?

    Ad ogni modo controlla sempre, nella console del tuo browser, che non saltino fuori errori di script quando viene eseguito quello script. Questo può aiutarti a capire le cause di eventuali problemi.
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  5. #5
    innanzitutto scusate se sbaglio nell'inserimento delle richieste ma sono nuovo e non so gestire bene il forum(oltre il java :-)).
    le due variabili sono numeriche;
    il file (lettura_dati_db.php) legge dal db e mi restituisce una tabella all'interno del (divrisposta);
    io vorrei che lo script mi confrontasse questi due valori e se sono diversi lanciare il file (il tutto ogni tot secondi);

  6. #6
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,675
    le due variabili sono numeriche;
    ok, questo esclude un possibile errore di omissione degli apici. Nel caso di restituzione di valori numerici, lo script dovrebbe apparentemente funzionare per come lo hai scritto.

    La condizione in questo caso sembrerebbe corretta; bisogna quindi scoprire cosa sta dietro a quel tuo "non succede nulla".

    Intanto ti consiglierei di rivedere la logica, come già ti è stato accennato.

    Senza andare a stravolgere il tuo elaborato, io sistemerei meglio la sequenza delle azioni nello script che già hai.

    - Per prima cosa farei in modo che l'intera successione di chiamate AJAX (cioè il tuosetInterval) sia lanciata solo se la condizione principale viene verificata.
    - Seconda cosa, anziché il metodo ajax() userei il load(), che sostanzialmente è una "semplificazione" per impostare una chiamata AJAX.
    - Terza cosa, dal momento che l'evento di ricezione della risposta dal server è asincrono (cioè non sai quando e se riceverai risposta dal server) userei un setTimeout, anziché il setInterval, da lanciare ogni volta che avverrà la risposta dal server. In tal modo, se ci dovessero essere problemi di collegamento col server, non si rischia di accavallare le varie richieste, ma ogni richiesta partirà solo dopo ogni risposta ricevuta.

    Potrebbe essere una cosa del genere:
    codice:
    var function aggiornaDati(){
      $("#divrisposta").load("lettura_dati_db.php", function(){
        AttendiPoiAggiornaDati();
      });
    }
    
    var function AttendiPoiAggiornaDati(){
      setTimeout(aggiornaDati, 5000);
    }
    
    if ($_SESSION['id2']!=$_SESSION['id1']) AttendiPoiAggiornaDati(); // Oppure direttamente aggiornaDati(); se non si vuole l'attesa dopo l'apertura della pagina
    Sia chiaro, questi accorgimenti non vogliono essere posti a determinare la risoluzione del problema in questione; sono solo suggerimenti e sono comunque da valutare meglio secondo il reale contesto.

    Ad ogni modo non è possibile determinare con chiarezza le cause del problema che lamenti perché mancano dettagli importanti.

    Andando per esclusione: dal momento che stai integrando codice PHP, devi necessariamente avere sicurezza che l'HTML restituito sia corretto. Ti invito quindi a fare delle verifiche attraverso il tuo stesso browser: controlla prima di tutto il "codice sorgente" e verifica che quella parte di JavaScript sia sintatticamente corretta e che lo script in questione sia riportato come tu lo aspetteresti.

    In altre parole, guardando il codice sorgente HTML (una volta aperta la pagina nel browser) quelle due variabili PHP dovranno essere riportate come valori numerici (come tu hai supposto). Se così non fosse, allora qui c'è il/un problema.

    Verifica e fai sapere.



    PS:
    oltre il java :-)

    occhio, qui si parla di JavaScript e JavaScript non è Java; nell'ambito di un forum tecnico (e della programmazione in generale) è essenziale non confondere il nome dei due diversi linguaggi.
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  7. #7
    non è semplice da spiegare ma ci provo
    in pratica lo script legge una sola volta le variabili di sessione in php e poi si ferma perchè appunto deve essere eseguito se le variabili sono diverse..ma la variabile (session id1) cambia quando io aggiungo un msg in chat solo che lo script non aggiorna quella variabile e quindi non si avvia. Allego lo screen della console di firefox

    Immagine.gif
    nel primo cerchio rosso session id1 e session id2 dopo l'invio di un msg
    Ultima modifica di Gaetano80; 10-09-2021 a 19:16

  8. #8
    killer worm con il tuo codice fa la stessa cosa.se imposto le due variabili manualmente fa il ciclo continuo altrimenti se le legge dalla sessione una volta fatto il primo ciclo poi non le legge più
    Ultima modifica di Gaetano80; 10-09-2021 a 19:20

  9. #9
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,675
    in pratica lo script legge una sola volta le variabili di sessione in php e poi si ferma perchè appunto deve essere eseguito se le variabili sono diverse..ma la variabile (session id1) cambia quando io aggiungo un msg in chat solo che lo script non aggiorna quella variabile e quindi non si avvia.
    Chiariamo una cosa: il PHP non può essere eseguito lato client, quindi ciò che ti arriva al browser sono solo quei due valori iniziali, che hai quando apri la pagina. Per ottenere i valori aggiornati dovrai ricaricare la pagina stessa, oppure interrogare nuovamente il server, ad esempio con una chiamata AJAX da cui poi esegui il controllo con i valori aggiornati.

    In tal caso è buono il consiglio di ninja72: puoi eseguire magari la chiamata AJAX che punta al file php in cui controlli i valori e restituisci i dati in base alla relativa condizione.
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

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 © 2024 vBulletin Solutions, Inc. All rights reserved.