Aggiornamento pagina php con ajax

masca2055

Nuovo Utente
12 Set 2016
1
0
1
Buongiorno a tutti,
vi espongo il mio problema.
Nel server ho delle tabelle contenute all'interno di un file php, che vengono aggiornate ogni 5 secondi da terzi (programma labview).
In una pagina del mio sito ho bisogno di visualizzare queste tabelle e ho necessità che si aggiornino sempre ogni 5 secondi, senza però riaggiornare la pagina, per far ciò ho utilizzato ajax, e la cosa funziona (non posso purtroppo salvare i file in database e aggiornare quelli, ma posso solo in questo caso aggiornare la pagina php).

Il problema è che delle volte le tabelle non vengono caricate correttamente, o viene visualizzata una pagina bianca, o solo una parte, questo penso sia dovuto al fatto che il caricamento del file sul server non sia ancora completo quando con ajax aggiorno le tabelle sul sito.

Come posso risolvere?

Questo è lo script per l'aggiornamento automatico delle tabelle

<script>
function loadDoc() {
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
document.getElementById("demo").innerHTML = this.responseText; } };
xhttp.open("GET", "tables.php", true);
xhttp.send(); }
setInterval(function(){
loadDoc()}, 5000)
</script>
 
sono due processi asincroni che possono essere in conflitto, come hai sperimentato,

la soluzione che mi sento di proporre consiste nel verificare se il contenuto di "tables.php" è completo,
in caso affermativo puoi pubblicarlo,
in caso negativo puoi rifare la lettura (Ajax) immediatamente

la verifica del contenuto è possibile se "tables.php" è strutturato sempre allo stesso modo, ed al suo interno cambiano solo valori operativi

se così non fosse, .... magari arriva qualche idea da altri
 
  • Like
Reactions: masca2055
Ciao, non ti serve il setinterval : una volta che hai verificato lo status dell chiamata ajax puoi rifarla tranquillamente.
Codice:
 function loadDoc() {
        var xhttp = new XMLHttpRequest();
        xhttp.onreadystatechange = function () {
            if (this.readyState == 4 && this.status == 200) {
                document.getElementById("demo").innerHTML = this.responseText;
                loadDoc();
            }
        };
        xhttp.open("GET", "tables.php", true);
        xhttp.send();
    }
aggiungendo al massimo un timeout
Codice:
aetTimeout("loadDoc()",5000);
ps: 5 secondi per eseguire una query mi sembrano tanti, controlla gli indici della tabella.
 

Discussioni simili