2011-01-08 12 views
0

Anfahrt Realtime Daten aus MySQL-Datenbank mit jQuery jeder One SekundenWie Echtzeit-Daten aus der Datenbank mit jQuery alle 1 Sekunde

i ändern müssen document.write bekommen, so sehe ich Ergebnis in einer neuen Seite

<SCRIPT> 
      setTimeout("document.write('<p><?php 
     $qry = mysql_query('SELECT SUM(clicks) AS total FROM short_urls'); 
     $row = mysql_fetch_assoc($qry); 
     echo number_format($row['total']); ?></p>')",1000); 
</SCRIPT> 
+2

Bitte stellen Sie sicher, dass Sie wirklich verstehen, warum der obige Code ein totaler Unsinn ist. Sie verwenden den Browser, um Code auszuführen, der auf Ihrem Server ausgeführt werden soll. –

Antwort

4

Eine einfache Strategie ist setTimeout zu verwenden:

setTimeout(function(){ 
    your_function_that_gets_data(); 
    your_function_that_displays_data(); 
}, 1000); 

Für anspruchsvollere Ansätze, die Sie in long polling aussehen könnte.


Update: Anas, es sieht aus wie Sie die Schienen ging ein wenig, nachdem ich die oben genannte Option vorgeschlagen. Egal, ob Sie setTimeout() oder setInterval() verwenden, Sie möchten sicherlich die verwirrende Mischung vermeiden, mit der Sie Ihre Frage aktualisiert haben.

Erstellen Sie eine PHP-Seite, die einfach die Summe zurückgibt. Schreiben Sie Ihr JavaScript, um diese Seite asynchron (d. H. Über Ajax) in dem von Ihnen gewünschten Intervall aufzurufen. Wenn das Ergebnis zurückgegeben wird, verwenden Sie eine Rückruffunktion, um die Seitenregion neu zu zeichnen, sodass die Gesamtsumme für den Benutzer aktualisiert wird.

Etwas wie folgt aus:

var updateTotal = function() { 
    $.get('your_script_that_returns_a_total.php', function(data){ // get new total 
    $('#div_displaying_total').val(data); // paint a div with the new result 
    }); 
}; 

Jetzt haben Sie eine einfache Funktion, die, wenn ausgeführt, wird ein div in der Ansicht mit der aktuellen Gesamt aktualisieren. Führen Sie diese Funktion so häufig aus, wie Sie möchten. Zum Beispiel ist es alle fünf Sekunden laufen:

var running = setInterval(updateTotal, 5000); 

Sie können natürlich viel schicker mit Timing bekommen, Ihre updateTotal Funktion das Schreiben selbst nach einer Verzögerung zu nennen, etc. Und können Sie die Aktualisierung wie folgt stoppen:

clearInterval(running); 

... mit dem Sie einfach einen Ein-/Ausschalter einrichten können.

Wenn dies zu mehr Klarheit führt, würde ich vorschlagen, Ihre Frage zu aktualisieren, die downvotes für den verwirrten Code darin anzieht.

+0

Vielen Dank, ich werde das testen – Abudayah

+0

Sie könnten auch setInterval() betrachten. Es wiederholt es automatisch. Und um zu viele Anfragen gleichzeitig zu verhindern, sollten Sie am Ende der Rückgabe jeder Anfrage ein setTimeout setzen. – Eric

+0

Wie wird dieser Code für die Straffung, ich meine, wird dies meine Serveranforderungen verstopfen? – MarkP

2

Sie müssen PHP verwenden, um einen Aufruf an die Datenbank zu machen, um alle Zeilen daraus zu lesen. Die PHP würde von einem AJAX Event-Set mit einer JavaScript setTimeout() Funktion für alle 1000ms (1 Sekunde) aufgerufen werden. Das huuuuge Problem, das ich damit sehen kann, ist, wenn Sie viele Benutzer, eine große Datenbank und viele gleichzeitige Logins haben, werden Sie sehr schnell Ihren Server überlasten. Ich denke, alle 30 Sekunden eine Anfrage einzureichen oder etwas wäre besser, vielleicht sogar 10.

+0

danke .. Ich werde diesen Code in "Über" Seite hinzufügen Ich denke, das wird nicht weh tun, weil die Anzahl der besuchten diese Seite ein wenig – Abudayah

+0

Eine nette Idee, obwohl nur um sicher zu sein würde ich nur mindestens alle 10 aktualisieren Sekunden. – Bojangles

Verwandte Themen