Ich muss ein Google-Liniendiagramm mit Trendlinien zeichnen, aber ich verwende eine Ajax-Anfrage, um Daten zum Einfügen zu erhalten
In der Ajax-Datei füge ich die Elemente der Grafik in ein Array ein und konvertiere sie dann so in JSON:
$reply= json_encode($array);
echo $reply;
Dies ist der Inhalt meiner Ajax-Antwort:
reply = [
["Periodo","Rome","Milan","Test"],
["20160830",1,2,3],
["20160831",2,3,6],
["20160901",2,3,20],
["20160902",20,30,12]
];
In meinem Programm befülle ich die Grafik so:
var replyJSON = JSON.parse(reply);
var data = google.visualization.arrayToDataTable(replyJSON);
Dies ist ein ähnliches Beispiel dafür, was ich habe und was ich tun würde, aber hier kann ich den Ajax-Aufruf nicht replizieren: http://jsfiddle.net/roby492/srrrn9sa/384/
Ich muss eine JSON-Antwort erhalten und die Datumszeichenfolge in jquery date konvertieren, um die Trendlinien korrekt anzuzeigen.
Wie kann ich das machen? Oder wie kann ich den JSON mit Datum anstelle einer Zeichenfolge per Ajax senden?
Danke schön. Roberto R.
Werfen Sie einen Blick auf dieses PHP-zu-Google-Diagramm über ein Ajax-Beispiel
empfehlen hier ein ähnliches Setup
Das Beispiel erstellt JSON, das von Google akzeptiert wird
was die Erstellung von ermöglicht DataTable
, direkt aus dem JSON
Das Folgende ist ein Ausschnitt aus dieser Antwort, der den JSON erstellt
$rows = array();
$table = array();
$table['cols'] = array(
array('label' => 'Time', 'type' => 'string'),
array('label' => 'Wind_Speed', 'type' => 'number'),
array('label' => 'Wind_Gust', 'type' => 'number')
);
while ($row = mysql_fetch_assoc($sqlResult)) {
$temp = array();
$temp[] = array('v' => (string) $row['Time']);
$temp[] = array('v' => (float) $row['Wind_Speed']);
$temp[] = array('v' => (float) $row['Wind_Gust']);
$rows[] = array('c' => $temp);
}
$table['rows'] = $rows;
echo json_encode($table);
eine tatsächliche Datumsspalte im JSON zu verwenden, wird ein wenig schwierig
hauptsächlich, weil Monatszahlen in JavaScript im Gegensatz zu PHP nullbasiert sind
Wenn Sie also ein Datum in PHP formatieren, müssen Sie die Monatszahl um 1 reduzieren
was zu einer langen Formatanweisung führt
Um ein Datum in JSON zu übergeben, können Sie das folgende Format verwenden, beachten Sie, dass es als Zeichenfolge übergeben wird …
"Date(2016, 8, 28, 15, 34, 40)"
–> was dem heutigen Datum entspricht
wieder ist der Monat nullbasiert (8 = September)
Um also ein Datum in diesem Format in PHP zu erstellen, können Sie Folgendes verwenden …
$date1 = new DateTime();
$date2 = "Date(".date_format($date1, 'Y').", ".((int) date_format($date1, 'm') - 1).", ".date_format($date1, 'd').", ".date_format($date1, 'H').", ".date_format($date1, 'i').", ".date_format($date1, 's').")";
das produziert die "Date(...)"
oben gezeigt
Wenn Sie das Snippet aus der anderen Antwort so anpassen, dass es eine Datumsspalte enthält, könnte es ungefähr so aussehen …
$rows = array();
$table = array();
$table['cols'] = array(
array('label' => 'Date', 'type' => 'date'),
array('label' => 'Wind_Speed', 'type' => 'number'),
array('label' => 'Wind_Gust', 'type' => 'number')
);
while ($row = mysql_fetch_assoc($sqlResult)) {
$date1 = $row['Date'];
$date2 = "Date(".date_format($date1, 'Y').", ".((int) date_format($date1, 'm') - 1).", ".date_format($date1, 'd').", ".date_format($date1, 'H').", ".date_format($date1, 'i').", ".date_format($date1, 's').")";
$temp = array();
$temp[] = array('v' => (string) $date2);
$temp[] = array('v' => (float) $row['Wind_Speed']);
$temp[] = array('v' => (float) $row['Wind_Gust']);
$rows[] = array('c' => $temp);
}
$table['rows'] = $rows;
echo json_encode($table);
Wenn Sie die obigen Ergebnisse über Ajax aus PHP erhalten, können Sie die Tabelle direkt erstellen
var data = new google.visualization.DataTable(reply);
keine Notwendigkeit, den JSON zu analysieren oder zu verwenden arrayToDataTable
.