Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    4

    Sincornizzazione Funzioni Javascript/AJAX

    Ciao a tutti,
    vi scrivo riguardo un problema che mi sta attanagliando.

    Anticipo che non sono un esperto nè di javascript nè di ajax, lo utilizzo da poco.

    Riassumendo ho una pagina con diversi menù select che vengono caricati leggendo da un DB.
    Molti di questi menù sono dipendenti da quello sovrastante (una sorta del classico caso Stato-Regioni-Province-Comuni).

    Per assicurare il funzionamento corretto delle funzioni Js che ho inserito, ho dovuto impostare qualche SetTimeout. In locale va tutto bene.
    Il problema è che questi SetTimeout diventano inefficenti in casi di rallentamenti della rete, oppure utilizzando la pagina dall'esterno (per esempio collegati tramite VPN).
    Infatti in questi casi, avendo il server una risposta più lenta, alcune funzioni js partono prima del completo caricamento degli altri menù, non trovando quindi i dati che necessitano per il corretto funzionamento.

    In sostanza vorrei rendere il timing delle funzioni dipendente dal termine del caricamento. In soldoni, non aspettando un tempo arbitrario deciso da me, ma aspettando che il server abbia inviato tutte le risposte.

    Spero di essere stato abbastanza chiaro, e spero in un vostro cordiale aiuto.

    Saluti,

    Stefano

  2. #2
    Frontend samurai L'avatar di fcaldera
    Registrato dal
    Feb 2003
    Messaggi
    12,924
    In genere tutte le chiamate a funzione, che dipendono da una risposta ottenuta attraverso chiamate ajax, vanno posizionate nelle callback delle chiamate stesse. Una callback è una funzione eseguita a seguito della risposta (negativa o positiva) del server

    parlando di javascript puro (no librerie) l'aggiornamento degli stati di una richiesta viene gestita attraverso il metodo onreadystatechange.

    Quando la proprietà readyState è uguale a 4 significa che hai completato la richiesta ed hai ricevuto una risposta dal server. La proprietà status identifica invece il tipo di risposta (200 e 304 sono risposte positive) e attraverso della semplice logica condizionale puoi eseguire funzioni diverse in base allo status

    In genere è necessario prevedere anche un timeout, perchè il server potrebbe rispondere lentamente e la chiamata ajax rimarrebbe in sospeso nell'attesa di ricevere una risposta. Quindi, prima di far partire la chiamata è buona regola attivare un setTimeout che consenta di gestire lo stato dell'applicazione in caso di mancata risposta (il setTimoeut va annullato non appena ricevi risposta, ovviamente)
    Vuoi aiutare la riforestazione responsabile?

    Iscriviti a Ecologi e inizia a rimuovere la tua impronta ecologica (30 alberi extra usando il referral)

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    4
    Allora, scusa se ti chiedo ancora aiuto.

    Io ho una funzione che chiamo per caricare il contenuto del select "figlio" al momento dell'evento "onchange".
    In sostanza come esempio, è come se selezionassi la provincia, e in quel momento lancio una funzione a cui passo due parametri , che mi popola il successivo select.

    Ho un caso particolare per esempio, dove carico un select con delle fasce orarie (8 - 9 ; 9 - 10 ) etc, e ho creato una funzione che seleziona automaticamente la fascia oraria corretta leggendo l'orario dal pc.

    Ovviamente questa seconda funzione, che ho chiamato "selectTime()" deve entrare in esecuzione dopo che il select contenente le fasce orarie sia stato completato. (Le fasce orarie sono tratte anch'esse da una tabella sul db).

    Al momento stavo risolvendo con un semplice "setTimeout("selectTime();",500);" ma come ho detto nel post precedente, questo non risolve il problema se si lavora in vpn, o con una rete lenta.

    Sai dirmi più specificamente come posso risolvere?

    Ti ringrazio

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.