2012-04-02 10 views
0

anzuzeigen Derzeit alle Arbeiten mit meinem jquery $ .post Aktionen, erfolgreiche Verbindungen, Abfrage und JSON_ENCODE auf meine Seite zurückkehren. Was ich nicht tun kann (und neu bei JSON) ist, wie die zurückgegebenen Werte als Live-Feed angezeigt werden? Meine aktuelle jquery js Datei ‚jquery-1.7.2.min.js‘ und mein CodeWie JSON-Array als sich wiederholende Region von Abfrage

$(document).ready(function(){ 
     setInterval(function(){ 
     $.post('query.php', function(pendingReq){ 
     $('#div_id').html(pendingReq); 
     }), 'json' }); 
    }, 5000 

); 

pendingReq aus der Abfrage meiner zurückgegebenen Daten ist und die aktuelle Ausgabe wie folgt aussieht: {"[0]":"FirstReq", "[1]":"SecondReq", ...."} basiert auf meiner mysql query Aufbau des Arrays

$res = array("[0]"=>var['1']...); 

ich bin sehr neu json zu verwenden, und nicht viel von Javascript verwenden, möchte aber die zurückgegebenen Daten in einer Tabelle angezeigt haben, danke.

Mein Code unten funktioniert, aber für nur eine Zeile der MySQL-Abfrage, wenn zwei Einträge existieren, bekomme ich einen "Uncaught SyntaxError: Unerwarteter Token {" Fehler in Firebug ?? Noch Ergebnisse als Rückkehr vor:

$res = array("req_name"=>$ew_display['req_name'], "date"=>$ew_display['req_dt']); 
echo json_encode($res); 



$(document).ready(function(){ 
      var table_template = "<table border=1 cellspacing=0 id='results'><tr><th>JTAR #</th><th>JTAR @</th></tr></table>"; 
      $("#testd").html(table_template); 
    setInterval(function(){ 
     $.post("query.php", {track : 2}, function(pendingReq){ 
      var json = JSON.parse(pendingReq); 
      var template = "<tr><td>{{req_name}}</td><td>{{date}}</td></tr>"; 
      var new_row = Mustache.render(template, json); 
      $("#results").append(new_row).fadeIn("slow"); 
     }), "json" 
}, 5000); 
+0

@dbaseman keine Ideen? Das erste Problem war meine jquery-Anweisung, es war falsch, jetzt vermute ich, dass dies durch das Array im Callback verursacht wird? –

Antwort

1

- EDIT -

Da du da drin ein Intervall haben, kann die Vorlage konstant sein:

var table_template = "<table border=1 cellspacing=0 id='results_table'><tr><th>col1</th><th>col2</th></tr></table>"; 
$("#div_id").html(table_template); 
var template = "<tr><td>{{[0]}}</td><td>{{[1]}}</td></tr>"; 

Jetzt für das Intervall, können Sie das Ergebnis String und machen jede analysieren Reihe:

setInterval(function() { 
    $.post("query.php", function(pendingReq) { 
     var json = JSON.parse(pendingReq); 
     var new_row = Mustache.render(template, json); 
     $("#results_table").append(new_row); 
    }); 
}); 

- END EDIT -

ich bin ein großer Fan von Mustache.js (https : //github.com/janl/mustache.js), mit der Sie Ihre Daten (JSON) von Ihrer Präsentation (HTML-Tabelle) trennen können. Ich bin kein großer Fan von AJAX-Daten von Ihrem Server als HTML vorformatiert. Sie können die folgende Syntax verwenden (nur Beispiel):

var template = "<table>{{#item}}<tr><td>{{name}}</td><td>{{age}}</td><td>{{job}}</td></tr>{{/item}}</table>"; 
var html = Mustache.render(template, pendingReq); 
$('#div_id').html(html); 
+0

Ich wusste nichts davon! Wie auch immer, wenn Sie nicht Schnurrbart haben, ist die Rückkehr HTML direkt besser als kämpfen, um die json über Javascript, IMHO anzuzeigen. – Stefan

+0

Heruntergeladenen Schnurrbart, machte eine Aufnahme auf meiner Seite und benutzte das obige Beispiel und ersetzte Namen, Alter, Job mit meinen Variablen und nur eine leere Seite (baute auch meine eigene div_id). Ich habe den obigen Beispielcode als Teil meiner Funktion 'code' $ (document) gesetzt .ready (function() { \t setInterval (function() { \t \t $ .post ("earf1.php", Funktion (pendingReq {) \t \t \t var template = "

{{}} req_name {{date}}
"; \t \t \t \t \t \t var html = Mustache.render (templa te, ausstehendeReq); \t \t \t $ ('# ew') .html (html); \t \t \t}), \t "json"}); }, 5000); 'code' –

+0

@dbaseman Noch kämpfen, um den Schnurrbart Weg vollständig zu verstehen, und ich glaube, es ist, dass meine Abfrage zurück ist eine Zeichenfolge kein Objekt, wie es zeigt {"0": "val1", "1 ":" val2 "...}, wäre das korrekt? –

0

Tschad, bitte

echo json_encode($res); 

Wenn PHP eine Zeichenfolge zurückgibt, dann können Sie

var json = JSON.parse(pendingReq); 
verwenden json_encode() für Ihre Array "$ res" verwenden

Sobald Sie das Json-Objekt erhalten, können Sie das verwenden. Bediener, um auf die Eigenschaften zuzugreifen.

zuerst herausfinden, was Ihre json enthält ... tun:

alert(JSON.stringify(json)); 

stringify wandelt ein JSON-Objekt zu lesbaren String Sie wieder mit JSON.parse umwandeln kann; Sie können auf die Eigenschaften zugreifen, indem Sie json.property ausführen.

Jetzt können Sie eine Tabelle haben, die alle Daten aktualisiert. Betrachten Sie ein Objekt wie dieses: var obj = {Name: "Adam", Alter: 35, Job: "Programmierer"}; Sie können diese Informationen in die Tabelle von:

$("#table").html($("#table").html() + "<tr><td>" + obj.name + "</td><td>" + obj.age + "</td><td>" + obj.job + "</td></tr>"); 
+0

Wenn ich auskommentieren var json = JSON.parse (pendingReq); und benutze alert (JSON.stringify (pendingReq)); Ich sehe den Text im Warnfenster, aber wenn ich das oben mit dem var = json versuche, habe ich einen leeren Bildschirm? –

+0

Versuchte noch eine Sache, löschte 2 meiner 3 Tabellen von sql, und die Ausgabe funktionierte, und hielt endlos endlos die gleiche Ausgabe, so ist meine Frage jetzt, wie kann ich die Anzeige stoppen, sobald die Schleifenabfrage gestoppt hat? Und wie fahre ich den JSON-Code mit dem nächsten Array? Danke für das oben genannte auch –

0

Die jQuery-Dokumentation zeigt, wie Sie json verwenden können, die innerhalb der Ajax-Callback-Funktion zurückgegeben wird: http://api.jquery.com/jQuery.getJSON/

Aber anstatt Ihre Abfrage-Ergebnisse zurückzugeben als JSON, warum gibst du nicht html (Tabellencode, der deine Ergebnisse enthält) zurück und zeigst dann direkt dieses HTML in einem div?Hier

ist ein Beispiel für so etwas zu tun: Modifying the AJAX PHP database example

UPDATE: Wie werden die Daten als HTML zurück statt json:

OK, lassen Sie uns sagen, dass Ihre PHP-Skript zur Zeit eine json codierte Zeichenfolge zurückgibt:

$str_json = '{"0":"FirstReq", "1":"SecondReq", ...."}'; 

Jetzt etwas tun, wie dies in der pHP-Skript - je nachdem, was Sie natürlich zeigen wollen:

$lst_data = json_decode($str_json); 

$html = "<table>\n<tr>\n"; 
foreach ($lst_data as $i => $data) { 
    $html .= "<th>" . $i . "</th>"; 
$html .= "</tr>\n<tr>\n"; 
foreach ($lst_data as $data) { 
    $html .= "<td>" . $data . "</td>"; 
} 
$html .= "</tr>\n</table>\n"; 

echo $html; 

EDIT: Sie wahrscheinlich etwas Ähnliches wie dieses:

$res = mysql_fetch_assoc($data); 

// Remove this from your script: echo json_encode($res); 

// Add this: 
$html = "<table>\n<tr>\n"; 
foreach ($res as $i => $r) { 
    $html .= "<th>" . $i . "</th>"; 
$html .= "</tr>\n<tr>\n"; 
foreach ($res as $r) { 
    $html .= "<td>" . $r . "</td>"; 
} 
$html .= "</tr>\n</table>\n"; 

echo $html; 

... und erinnern Datentyp in jQuery $ .post() -Funktion html einzustellen.

+0

Wie würde ich es als HTML von meiner SQL-Abfrage zurückgeben? Htmlentities? –

+0

Erstellen Sie einfach eine HTML-Zeichenfolge mit normalem HTML-Code, die Sie sehen möchten, und geben Sie diese am Ende des Skripts aus: '$ html = '

... (verwenden Sie die PHP-Daten aus der Abfrage) ..
'; echo $ html; ' – Stefan

+0

Ändern Sie auch den Parameter dataType in der Funktion .post() in 'html' (oder lassen Sie es leer). – Stefan

Verwandte Themen