2009-06-30 10 views
0

Ich bin ein grundlegendes Forum erstellen, wo jeder Beitrag enthält einen Text, Vor- und Nachname und das Datum, an dem die Nachricht geschrieben wurde. Ich möchte das Board ständig mit AJAX aktualisieren und neue Nachrichten während des Schreibens hinzufügen. Ich habe eine Datei, getlatest.php?date=..., die alle Nachrichten von dem Datum in $_GET bis NOW() abruft. Es gibt die Daten als Array von Objekten zurück. Zuletzt kodiere ich die Daten JSON. Ich nenne diese Funktion von einem AJAX-Code, etwa so:Aufruf von PHP aus Js (w/ajax)


setInterval("update()", 5000); 
       function update(){ 
        $.get("getlatest.php", { 
         date: "2009-06-23_16:22:12" //this is just a date I 
                //entered for testing 
        }, function(forumdata){ 
              //do something with forumdata here? 
        }, "json"); 
       } 

Jetzt habe ich die Daten innerhalb forumdata, wie in forumdata[0].first_name ect.

ich jetzt PHP verwenden, um den Bildschirm Kommentar, wie so möchte:

$forumdata = json_decode(forumdata); 
foreach ($forumdata as $value) 
{ 
    $newpost = new Post($value); // Post being some class that gets the data from 
           // $value and converts it to HTML + CSS 
    $newpost->displayPost();  // some function that echo's the HTML 
} 

Ich weiß, was ich versuche, hier zu tun ist etwas nicht machbar, da PHP ist eine serverseitige Sprache, und Die Berechnungen sind an diesem Punkt Client-Seite, aber gibt es einen Weg (vielleicht durch AJAX?), dass ich PHP verwenden könnte, um die Daten zu verwalten, sobald ich es durch Javascript abrufen?

Mein Hauptgrund dafür ist mein absoluter Mangel an JavaScript-Kenntnissen. Daher sind auch Alternativen für die Übersetzung der forumdata-Variablen in HTML- und CSS-Blöcke für mich großartig.

Antwort

0

Nun, da Sie nicht zu viel JavaScript verwenden möchten (haben Sie keine Angst vor den beliebten Libraries und Frameworks, ist es eine ziemlich einfache Sache zu lernen und kann Ihnen eine Menge Ärger ersparen.) Verwalten Sie alles auf der Serverseite) Sie können nur den HTML-Code ausgeben, ohne ihn in JSON zu dekodieren. So hat der Kunde dies:

setInterval("update()", 5000); 
       function update(){ 
        $.get("getlatest.php", { 
         date: "2009-06-23_16:22:12" //this is just a date I 
                //entered for testing 
        }, function(forumdata){ 
              //do something with forumdata here? 
      // e.g. 
      $("#forum_entries").prepend(forumdata); 
        }, "html"); 
       } 

Und der PHP-Skript (getlatest.php) gerade tut dies:

<?php 
$forumdata = find_posts_after_date($_GET('date')); 
foreach ($forumdata as $newpost) 
{ 
    // Echos just the post specific HTML not a whole HTML page 
    $newpost->displayPost();  // some function that echo's the HTML 
} 
?> 

Wie nerdling bereits vorgeschlagen, dass Sie nicht nach dem Datum, aber die latext Eindeutige ID verwenden sollten Der Post, den der Client gerade anzeigt.

+0

Danke für die Referenz zurück zu meinem Beitrag! –

+0

Ja, das war eine Aufwertung wert, weil es wirklich Sinn macht, die ID zu verwenden (es ist auch schneller, aus der Datenbank zu wählen). Das ist eine weitere coole Sache im Stackoverflow, die ich auch immer aus anderen Antworten lernen kann. – Daff

0

Sie sollten getlatest.php ändern (oder eine neue Datei erstellen, getlatesthtml.php), damit die HTML-Ausgabe von displayPost() zurückgegeben wird. Dann "// etwas mit forumdata hier machen?" muss nur .innerHTML eines Containers irgendwo setzen.

1

Sie können getlatest.php HTML-Code anstelle von JSON-Daten zurückgeben. Auf diese Weise müssen Sie nur den zurückgegebenen HTML-Code in Ihr Dokument einfügen.

2

Der Weg zur Vermeidung der Mismatching von Daten/Zeiten zwischen dem Server und Client besteht darin, dass jeder Eintrag eine eindeutige ID hat. Auf diese Weise können Sie einen bestimmten Datensatz anstelle einer relativen Zeit für Ihren Offset angeben. Primärschlüssel in MySQL sind ein Beispiel dafür.

+0

nicht zu meiner Frage verwandt, aber sehr nützlich, danke! –

0

Ich sehe, Sie haben bereits eine Antwort akzeptiert, aber Sie könnten darüber nachdenken, zu lernen, die JSON zu analysieren. Es gibt so viele Gründe, warum Sie möchten, dass das JavaScript die Anzeige der Daten behandelt. Denken Sie an alle Web-Services mit APIs, sie geben eine Art XML oder JSON zurück. In Anbetracht dessen, wo Sie jetzt mit jQuery sind, ist es so grundlegend wie das Lernen von "each()". Ich habe etwas gegoogelt, this Link sieht aus wie es dich fangen wird. Hinterlassen Sie Kommentare, wenn Sie mehr Hilfe benötigen.