Beiträge: 636
Themen: 65
Registriert seit: Feb 2021
Bewertung:
14
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
Beiträge: 131
Themen: 34
Registriert seit: May 2022
Bewertung:
0
! 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: <?php
$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
Beiträge: 636
Themen: 65
Registriert seit: Feb 2021
Bewertung:
14
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 ?
Beiträge: 131
Themen: 34
Registriert seit: May 2022
Bewertung:
0
(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
Beiträge: 131
Themen: 34
Registriert seit: May 2022
Bewertung:
0
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);
Beiträge: 131
Themen: 34
Registriert seit: May 2022
Bewertung:
0
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);
Beiträge: 636
Themen: 65
Registriert seit: Feb 2021
Bewertung:
14
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
Beiträge: 131
Themen: 34
Registriert seit: May 2022
Bewertung:
0
(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.
Beiträge: 131
Themen: 34
Registriert seit: May 2022
Bewertung:
0
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);
Beiträge: 306
Themen: 14
Registriert seit: Jun 2022
Bewertung:
26
16.07.2022, 14:56
(Dieser Beitrag wurde zuletzt bearbeitet: 16.07.2022, 15:25 von rzscout.)
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.
|