Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709

    setTimeout/setInterval (con Ajax) ogni tanto si blocca su IE

    Ho una complessa serie di funzioni JS, tra cui un sistema che gestisce tramite Ajax dei db facendo controlli periodici mediante dei setTimeout/setInterval (c'è setTimeout ripetuto in certi casi oppure direttamente setInterval). FUNZIONA TUTTO tranne l'unico problema che qui riporto: su IE (con altri browser pare non vi siano problemi) OGNI TANTO quando si sposta il fuoco dal browser (per esempio aprendo altre finestre o andando a lavorare su altri programmi) le funzioni setTimeout/setInterval smettono di lavorare! Questo accade NON SEMPRE e non viene restituito alcun errore JS. In ogni caso non si è mai verificato alcun problema con altri browser (in particolare FF) e neanche su IE se si tiene la pagina sempre attiva col focus.

    Spero in qualche suggerimento...

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    ...aggiungo...

    anche se non è una soluzione ottimale, potrei anche pensare - momentaneamente - di generare un refresh in JS quando si riattivi il "focus" della pagina... ovviamente però dovrei trovare una soluzione adatta a questo, in quanto mettendo un refresh nell'onFocus del body ottengo un loop!

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    E` un problema noto, che il multitasking ha qualche problema con Windows. In particolare fino al Win2000/NT non esisteva un vero multitasking. Ora con XP dovrebbe essre migliorato, ma in linea di massima la microsoft preferisce la retrocompatibilita` rispetto alle innovazioni.
    Per cui non mi meraviglia il comportamento da te descritto.

    Esiste l'evento onfocus, ed esiste l'evento onblur. Con questi puoi giocarci.
    Esempio 1 (da non implementare):
    onblur="this.focus();"

    Esempio 2 (da studiare e testare):
    onfocus="if(rip) {clearTimeout(rip); rip=setTimeout("....");}"
    dove la variabile rip deve essere definita globale al momento in cui la usi per la prima volta;
    il clearTimeout() serve per eliminare l'eventuale Timeout che stesse girando, prima di farlo ripartire.
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    ok... forse tenterò qualcosa con il tuo "esempio 2" (che + o - è quello che già stavo tentando). Ke seccatura, però!

    Grazie!

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.