Themabewertung:
  • 1 Bewertung(en) - 5 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
refresh setTimeout function
#31
Ich frage mal was anderes. Was wird in deiner Datenbank geändert?
Du hast jetzt z. B. 250 Einträge. Wenn du alle 5 Sekunden in der db eine Abfrage machst, siehst du ja, ob es 250 sind oder 251 .
Sind es 251, musst du das aktualisieren.
Falls du immer 250 Einträge hast und sich nur der Inhalt updatet , gibt es Möglichkeiten das zu erkennen , bzw. zu speichern.
An besten gibst du nur eine 1 und die Anzahl der Spalten zurück

Mach es dir an Anfang nicht so schwer und erstelle nur Code der erstmal wichtig ist .
Zb las den 5 Sekunden Counter weg , denn kannst du einbauen wenn es läuft.
Das bringt ein schnell durcheinander , gerade wenn man dann zb gleiche Variabeln nutzt , zb dein x und später das x in der for Schleife.

Fang z. B. so an
Code:
function abfrage(x){
        $.ajax({
            type: 'POST',
            url: 'daten_unerledigt.php',
            data:{check:g,page:11,limit:limit},  
            success: function(response){
                if(response!=''){
                    document.getElementById('infobox').innerHTML='<p style="color:green">neue Daten werden geladen...</p>';
                  weiter_daten_holen();
                }else{
                    document.getElementById('infobox').innerHTML='<p style="color:red">derzeit liegen keine neuen Daten vor...</p>';
                }
                setTimeout(function(){
                  console.log(x)
                    abfrage(x)
                },(x*1000));
           }    
        });
}
abfrage(5)

function weiter_daten_holen(){
  hier dann zb das JS von mir wo du die Daten aus der db holst
  
}

Gebe im PHP Script eine 1 und die Anzahl der Spalten zurück

Code:
// hier db abfrage erstellen
// ergebniss hier rein
$arr = array('new' => 1, 'menge' => 250);
echo json_encode($arr);

Abfragen ob New eine 1 hat kannst du ja schon .
Dann in der nächsten Funktion die neuen Daten holen.

,

Man könnte die ganze Abfrage auch in einer Funktion machen , doch ich denke, du solltest es erst so machen , dann ist es einfacher zu verstehen
Hier sind alle meine Lösungen aus allen Foren. Ich helfe auch in Facebook-chat
Zitieren
#32
! vielen dank für deine gedult !

! habe hier einfach eine denkblockade !





hier zu deiner frage:



Zitat:Ich frage mal was anderes. Was wird in deiner Datenbank geändert?
Du hast jetzt z. B. 250 Einträge. Wenn du alle 5 Sekunden in der db eine Abfrage machst, siehst du ja, ob es 250 sind oder 251 .




antwort ist richtig, es können mal 250 datensätze sein oder mal 80 datensätze unterschiedlich,

halt individuell ob datensätze gelöscht werden oder dazukommen.



die datensätze in der db zu zählen ist ja keine große sache.

PHP-Code:
$result mysqli_query($link"SELECT TelegramStorage.id FROM TelegramStorage");
 
$anzahl_zeilen =  mysqli_num_rows($result);
 
 
$arr = array('new' => 1'menge' => $anzahl_zeilen);
 
 echo 
json_encode($arr); 
ergebnis:



Zitat:{"new":1,"menge":241}




jetzt zur meiner denkblockade:



ich habe das ergebnis "241" gegen was prüfe ich das ergenis? die 241 ist doch variabel.

sobald ein neuer datensatz dazukommt ist die variable 242 und 241 wird überschrieben, ich habe doch kein festen wert in der datenbank



die 241 muss doch als fester wert x gespeichert werden oder nicht?

if ( x < $arr ) then begin
Zitieren
#33
Zb so
var x=0
daten holen
var response=241;
if(x!=response){
// daten holen
x=response;
// x hat jetzt auch den wert von 241:
solange response auch 241 hat passiert nichts
wenn datenbank jetzt mehr oder wenniger als 241 hat ist x ungleich response und holt neue daten
}else{

// nichts machen
}

Verstehst du das so wie ich das meine ?
Hier sind alle meine Lösungen aus allen Foren. Ich helfe auch in Facebook-chat
Zitieren
#34
(11.07.2022, 14:27)admin schrieb: Zb so
var x=0
daten holen
var response=241;
if(x!=response){
// daten holen
x=response;
// x hat jetzt auch den wert von 241:
solange response auch 241 hat passiert nichts
wenn datenbank jetzt mehr oder wenniger als 241 hat ist x ungleich response und holt neue daten
}else{

// nichts machen
}

Verstehst du das so wie ich das meine ?

ja, jetzt ist mir ein licht aufgegangen ! nochmals vielen dank
Zitieren
#35
das mit der datenbank abfrage geht jetzt :-)
dafür habe ich noch ein problem mit der zeit schleife :-(

zeit = 5 sekunden, wieso wird die zeit nicht richtig runtergezählt?

https://oesoft.de

Code:
var ausgabe = 0;
var relodzeit = 5;

function refresh(){
    if( zeit <= 0){
      $.ajax({
            type: 'POST',
            url: 'daten_unerledigt.php',
            data:{},   
            success: function(response){
                if(response != ausgabe){
                  ausgabe = response;
                  document.getElementById('infobox').innerHTML='<p style="color:green">neue Daten werden geladen...</p>';
                 }else{
                  document.getElementById('infobox').innerHTML='<p style="color:red">derzeit liegen keine neuen Daten vor...</p>';
                 }
                
                        
        }
    });
} else {
     zeit--;
     setTimeout(function(){
              document.getElementById('infobox').innerHTML='<p>prüfe Datenbank auf neue Daten in '+zeit+' Sekunden</p>';
              refresh()
         },1000)
}
}


setInterval(function(){
    zeit = relodzeit;
    refresh()
}, 5000);
Zitieren
#36
so müsste es jetzt richtig sein oder?

setInterval() und setTimeout() ist doch von der ausführung her unterschiedlich!
habe zuerst gedacht die funktion ist gleich.

Code:
var ausgabe = 0;
var relodzeit = 6;

function refresh(){
    if( zeit <= 0){
      $.ajax({
            type: 'POST',
            url: 'daten_unerledigt.php',
            data:{},   
            success: function(response){
                if(response != ausgabe){
                  ausgabe = response;
                   document.getElementById('infobox').innerHTML='<p style="color:green">neue Daten werden geladen...</p>';
                    setTimeout(function(){
                        refresh();
                      }, 3000);
                 }else{
                   document.getElementById('infobox').innerHTML='<p style="color:red">derzeit liegen keine neuen Daten vor...</p>';
                    zeit = relodzeit;
                    setTimeout(function(){
                        refresh();
                      }, 3000);
                 }
                
                        
        }
    });
} else {
     zeit--;
     setTimeout(function(){
              document.getElementById('infobox').innerHTML='<p>prüfe Datenbank auf neue Daten in '+zeit+' Sekunden</p>';
              refresh()
         },1000)
}
}


setTimeout(function(){
    zeit = relodzeit;
    refresh();
}, 5000);
Zitieren
#37
setTimeout wird nur einmal ausgeführt , Intervall immer wieder. Wenn du das in einer Funktion hast und sich immer wieder ausführen lässt , ist setInterval falsch , weil dann ruft er sich immer wieder auf bis zum Absturz.
So wie es jetzt aussieht, scheint es richtig zu sein
Hier sind alle meine Lösungen aus allen Foren. Ich helfe auch in Facebook-chat
Zitieren
#38
(14.07.2022, 13:40)admin schrieb: setTimeout wird nur einmal ausgeführt , Intervall immer wieder. Wenn du das in einer Funktion hast und sich immer wieder ausführen lässt , ist setInterval falsch , weil dann ruft er sich immer wieder auf bis zum Absturz.
So wie es jetzt aussieht, scheint es richtig zu sein

 hallo admin,

 wenn ich die webseite https://oesoft.de öffne,  soll einmalig die tabelle sofort geladen werden, nicht erst nach 5 sec.
 wie setzte ich das am besten um?
 
Code:
setTimeout(test, 300){
  document.getElementsByTagName('table')[0].innerHTML = `<tbody>${response}</tbody>`;
}


tabelle muss ich noch basteln, habe es gestern versucht :-( leider ohne erfolg.
möchte htmlscript und javascript jeweils in einer eigenen datei laufen lassen.
Zitieren
#39
hier die lösung :

Code:
function dokumentVollständigGeladen(){
    $.ajax({
            type: 'POST',
            url: 'daten_unerledigt.php',
            data:{},   
            success: function(response){
                if(response != ausgabe){
                  ausgabe = response;
                   document.getElementById('infobox').innerHTML='<p style="color:green">neue Ereignisse in der SQL-Datenbank (mariadb) erkannt, Daten werden aktualisiert...</p>';
                   document.getElementsByTagName('table')[0].innerHTML = `<tbody>${response}</tbody>`; 
                   document.getElementById('array_geladen').style.display = 'block';
}
    }
    });
}

window.addEventListener('load', dokumentVollständigGeladen, false);
Zitieren
#40
Hi,
ich würde dir empfehlen auf jQuery zu verzichten. Die Performance wird dir es später danken. Ich würde dir auch empfehlen den 'user strict'-Mode anzuwenden. Damit kannst du lokale Variablen verwenden. Das macht die Performance noch besser und man kann außerhalb der Funktion die Variable nutzen ohne eine bestehende zu überschreiben.

Zu Font: In HTML5 und CSS3 kannst du auf font verzichten, da es veraltet ist und nicht dem neuen HTML-Standart entspricht. Verwende hier Elemente wie p, span, und andere Textformatierungs-Elemente. Verwende bitte auch kein width-Attribut mehr, dafür gibt es CSS.

Eine Lösung wäre es für das bzw. entsprechende Elemente eine CSS-Klasse erstellen und dieser Code hier:
Code:
field.classList.add('meineKlasse');

Und dann in CSS:

Code:
'use strict';
var xhr, infobox, myTable, array_geladen, rsp;
document.addEventListener('DOMContentLoaded', init);
function init() {
    infobox = document.getElementById('infobox');
    myTable = document.getElementsByTagName('table')[0];
    array_geladen = document.getElementById('array_geladen');
    xhr = new XMLHttpRequest();
    xhr.open('POST', 'daten_unerledigt');
    xhr.addEventListener('readystatechange', ()=> {
        if(xhr.status==200&&xhr.readyState==4) {
            rsp = xhr.responseText;
            infobox.innerHTML = "Whatever...";
            let mytBody = document.createElement('tbody');           
            myTable.appendChild(mytBody);
            mytBody.innerHTML = rsp;
            array_geladen.style.display = "block";
        }       
    });
    xhr.send(); 
}
Diese Version ist ohne jQuery. Man kann auch fetch.. then.. anstatt XML-Request benutzen. Für mich ist der XMLHttp-Request aber so lesbarer und ich kann damit auch komplexe Requests schreiben.
Zitieren


Gehe zu:


Benutzer, die gerade dieses Thema anschauen:
1 Gast/Gäste