Ronny B.: AJAX + PHP => Ausgabe eines immer aktuellen MySQL Wertes

Guten Tag :)

In einer MySQL-Datenbank befindet sich ein Wert, welcher sich regelmäßig ändert.

Dieser Wert soll mit Javascript regelmäßig an einer bestimmten Stelle einer
Webseite ausgegeben werden, wobei der neue Wert den alten Wert ersetzt.

Beispiel:

Oben auf der Webseite steht der Code: 51x
In der Datenbank ändert sich der Wert, und der aktuelle Wert ist 102s
Dann soll automatisch 51x ersetzt werden durch 102s

Der Wert soll in der MySQL Datenbank alle 10 Sekunden überprüft werden.

Vorgehensweise:

Ein PHP Script namens "mysql.php"  soll den jeweils aktuellen Wert
aus der MySQL Datenbank abfragen,  und ein Javascript soll den Wert
dann wiederum auf der Webseite ausgeben (wie oben beschrieben)

Möglich ist das,  Stichwort AJAX...  nur ich weiß nicht wie :-)

Gesucht wäre entweder ein sehr gutes "Howto",
oder vielleicht sogar ein OpenSource Script welches
ich soweit modifizieren kann,  dass es läuft...

Um Links wird ersucht.

Vielen Dank,

Ronny B.

  1. Hi,

    Möglich ist das,  Stichwort AJAX...  nur ich weiß nicht wie :-)

    Gesucht wäre entweder ein sehr gutes "Howto",
    oder vielleicht sogar ein OpenSource Script welches
    ich soweit modifizieren kann,  dass es läuft...

    Um Links wird ersucht.

    http://www.google.com/

    MfG ChrisB

    --
    RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
  2. Der Wert soll in der MySQL Datenbank alle 10 Sekunden überprüft werden.

    Ändert sich der Wert nachvollziehbar, sprich mit einem bekannten Algorithmus oder ist der Wert wirlklich NUR in der Datenbank?

    Gesucht wäre entweder ein sehr gutes "Howto",
    oder vielleicht sogar ein OpenSource Script welches
    ich soweit modifizieren kann,  dass es läuft...

    Nutze ein Framework damit du dir leichter tust.

    jQuery: .ajax() in einer Endlosschleife sollte reichen wenn es nicht unbedingt alle 10 Sekunden sein muss sondern es reicht, dass 10 Sekunden nach der aktualisierung eine neue Anfrage gestellt wird.

    Alle 10 Sekunden ist bedingt durch das Konzept von Ajax unmöglich.

    Es kann durchaus sein dass du einen Request zu Sekunde 0 verschickst, den nächsten zu Sekunden 10 und den dritten zu Sekunde 20. Dann komm zu Sekunde 21 die Antwort des zweiten Requests, zu Sekunde 22 die des Dritten und zu Sekunde 29 die des ersten Requests.

    1. jQuery: .ajax() in einer Endlosschleife

      Endlosschleife ist so gemeint: der Callback (complete) der .ajax()-Methode ruft seine Elternfunktion erneut auf, was wieder zu einem Callback führt - usw.

    2. Hi suit.

      Es kann durchaus sein dass du einen Request zu Sekunde 0 verschickst, den nächsten zu Sekunden 10 und den dritten zu Sekunde 20. Dann komm zu Sekunde 21 die Antwort des zweiten Requests, zu Sekunde 22 die des Dritten und zu Sekunde 29 die des ersten Requests.

      Ob die Reihenfolge der Antworten dieselbe ist wie die Reihenfolge des Abschickens der Requests, ist nicht erheblich. Nur, ob die Reihenfolge, in der die Antworten beim Client ankommen, dieselbe ist wie die Reihenfolge, in der sie vom Server produziert wurden.
      Dafür kann der Server die Systemzeit mitschicken (was aber ein paar potentielle Stolpersteine mit sich bringt), oder einen Counter in der Datenbank führen und jeweils mit senden, anhand dessen der Client erkennt, ob der neu empfangene Wert neuer ist als der aktuelle oder nicht.

      Verspätungen kann man natürlich trotzdem kriegen, aber das ist grundsätzlich nicht zu verhindern.

      Viele Grüße,
      der Bademeister

  3. Guten Tag :)
    Vorgehensweise:

    Ein PHP Script namens "mysql.php"  soll den jeweils aktuellen Wert
    aus der MySQL Datenbank abfragen,  und ein Javascript soll den Wert
    dann wiederum auf der Webseite ausgeben (wie oben beschrieben)

    Möglich ist das,  Stichwort AJAX...  nur ich weiß nicht wie :-)
    Ronny B.

    Hallo Ronny,

    versuch das mal:

      
    $(document).ready(function()  
    {  
     function check(){  
      $.ajax({  
       url: 'mysql.php,  
       type: 'GET',  
       dataType: 'html',  
       success: function (data) {  
        sub.children(".code").html(data);  
       }  
      });  
     }  
     $(function() {  
        var refreshId = setInterval(  
            check.();  
        }, 10000);  
    });  
    
    

    Nachlesen kannste hier:

    http://api.jquery.com/jQuery.ajax/

    lg Steffen

    1. dataType: 'html',

      Warum nicht xml? Wäre einfacher zu parsen und man hat zumindest das gefühl etwas handfestes gemacht zu haben :p

      Der Ansatz entspricht nicht dem, was der OP möchte - wie ich bereits sagte: mit Ajax ist dieser wunsch _unmöglich_ umsetzbar.

      https://forum.selfhtml.org/?t=202303&m=1366185

      Wenn du schon eine Lösung präsentierst ohne den OP selbst denken lassen zu wollen, dann bitte eine wasserdichte Lösung mit Erklärung dazu.

      Du gibst dem OP einen Waschtrog ohne Boden, drückst ihm ein Paddel in die Hand und schreist "Rudere!" - das finde ich kaum hilfreich, im Gegenteil - es ist sogar kontraproduktion.

      Womöglich liest Ronny B. meinen Kommentar garnicht und auch nicht die Antwort auf deinen Beitrag - er nimmt den Code und stößt dann - irgendwann in ein paar Monaten wenn sich Aufgrund von Lastschwankungen ein paar Probleme ergeben auf falsche Werte.

      Stell dir dieses vorhaben im Kontext einer Onlineaktion vor wo jemand dort sitzt und die Gebote verfolgt und dann falsche Werte gliefert bekommt und bietet, obwohl er eigentlich schon über seinem Limit ist: nicht cool.

  4. hi,

    Möglich ist das,  Stichwort AJAX...  nur ich weiß nicht wie :-)

    Wie jetzt, gar keinen Plan!? Klar geht das mit Ajax:

    -UserAgent (Browser, JS, XHR-Objekt) sendet intervallmäßig einen HTTP-Request an Deinen Server
    -Auf dem Server liegt ein Script was in die DB schaut und den Wert als Response sendet
    -Im UA nimmt das XHR-Objekt die Response entgegen und der Wert wird innerhalb der Callbackfunktion in die Seite eingebaut.

    Für weitere Recherchen, Stichworte s.o.

    Horst Kleinholz

    1. Wie jetzt, gar keinen Plan!? Klar geht das mit Ajax:

      Nein, geht es nicht - egal wieviele das jetzt noch sagen und wiederholen ;)

      -UserAgent (Browser, JS, XHR-Objekt) sendet intervallmäßig einen HTTP-Request an Deinen Server

      Dessen Antwort aber irgendwann kommen kann (das A in Ajax steht für "asynchronous") weil verschieden Faktoren beeinflussen können, wie lange welcher Request braucht.

      -Auf dem Server liegt ein Script was in die DB schaut und den Wert als Response sendet

      Das z.B.

      Es ist nicht garantier, dass ein zweiter Request der 10 Sekunden später als der erste abgeschickt wird auch später ankommt. Das würde Fehler verursachen.

      1. hi,

        -UserAgent (Browser, JS, XHR-Objekt) sendet intervallmäßig einen HTTP-Request an Deinen Server

        Dessen Antwort aber irgendwann kommen kann (das A in Ajax steht für "asynchronous") weil verschieden Faktoren beeinflussen können, wie lange welcher Request braucht.

        Naja, wenn Du das nicht mit Ajax machen möchtest, kannst Du ja die ganze Seite intervallmäßig neu laden. Das ist dann zwar nicht asynchron, aber das Protokoll ist dasselbe: HTTP, auf einen Request folgt die Response.

        Horst Kleinholz

        1. Naja, wenn Du das nicht mit Ajax machen möchtest, kannst Du ja die ganze Seite intervallmäßig neu laden. Das ist dann zwar nicht asynchron, aber das Protokoll ist dasselbe: HTTP, auf einen Request folgt die Response.

          Darum schlug ich alternative die Ajax-Endlosschleife vor.

          Das erfüllt zwar ebenfalls aufgrund der zeitlichen Probleme nicht die Anforderung des OP aber verhindert zumindest, dass ein späterer Aufruf früher ankommt und in die Seite eingebaut wird.

          1. hi,

            Darum schlug ich alternative die Ajax-Endlosschleife vor.

            Achso, ah, ja, hab verstanden, alles klar mit ajaxComplete, ist die bessere Lösung.

            Horst Schweinskopfsylze

            --
            Altes Haus, Ofen aus? Denkste!
  5. Tach auch.

    In einer MySQL-Datenbank befindet sich ein Wert, welcher sich regelmäßig ändert.

    Dieser Wert soll mit Javascript regelmäßig an einer bestimmten Stelle einer
    Webseite ausgegeben werden, wobei der neue Wert den alten Wert ersetzt.

    Im Gegensatz zu deinem Ansatz würde sich noch anbieten, eine andere Technik einzusetzen, welche sich unter anderem Comet nennt.

    Damit könntest du den Request so lange auf Server-Seite halten, bis sich in der Datenbank tatsächlich etwas geändert hat, und die Antwort dann dem Client zustellen.

    Bis die Tage,
    Matti