2017-09-28 2 views
0

Ich glaube, ich bin etwas fehlt. Ich habe den Vollkalender eingerichtet und die Standardversion funktioniert, aber ich füge jetzt meinen eigenen JSON hinzu, und das ist es nicht.FullCalendar JSON nicht Kalender bevöl

-Code in der Kalenderseite ist

$(document).ready(function() { 

    $('#calendar').fullCalendar({ 
     header: { 
      left: 'prev,next today', 
      center: 'title', 
      right: 'month,agendaWeek,agendaDay,listWeek' 
     }, 
     defaultDate: '2017-09-12', 
     editable: true, 
     navLinks: true, // can click day/week names to navigate views 
     eventLimit: true, // allow "more" link when too many events 
     events: { 
      url: 'php/get-events.php', 
      error: function() { 
       $('#script-warning').show(); 
      } 
     }, 
     loading: function(bool) { 
      $('#loading').toggle(bool); 
     } 
    }); 

}); 

Ich lerne, wie JSON zu codieren, wie ich entlang gehen, und ich fand ein Tutorial online, die mir einige Code gab, die zu funktionieren scheint. Ich habe den ursprünglichen Code in get-events.php geändert wie folgt (Code-Schnipsel mit DB Details herausgenommen) zu lesen ...

// Require our Event class and datetime utilities 
require dirname(__FILE__) . '/utils.php'; 

// Short-circuit if the client did not give us a date range. 
if (!isset($_GET['start']) || !isset($_GET['end'])) { 
    die("Please provide a date range."); 
} 

// Parse the start/end parameters. 
// These are assumed to be ISO8601 strings with no time nor timezone, like "2013-12-29". 
// Since no timezone will be present, they will parsed as UTC. 
$range_start = parseDateTime($_GET['start']); 
$range_end = parseDateTime($_GET['end']); 

// Parse the timezone parameter if it is present. 
$timezone = null; 
if (isset($_GET['timezone'])) { 
    $timezone = new DateTimeZone($_GET['timezone']); 
} 

class Emp { 
    public $id = ""; 
    public $title = ""; 
    public $start = ""; 
    public $url = ""; 
} 

while(!$JAN->atEnd()) {    
    e = new Emp(); 
    $e->id = $JAN->getColumnVal("ID"); 
    $e->title = $JAN->getColumnVal("TITLE"); 
    $e->start = $JAN->getColumnVal("DATE")."T".$JAN->getColumnVal("TIME"); 
    $e->url = "meeting_info.php?ID=".$JAN->getColumnVal("ID"); 
    echo json_encode($e); 
    $JAN->moveNext(); 
} 
$JAN->moveFirst(); //return RS to first record 

// Read and parse our events JSON file into an array of event data arrays. 
$json = file_get_contents(dirname(__FILE__) . '/../json/events.json'); 
$input_arrays = json_decode($json, true); 

// Accumulate an output array of event data arrays. 
$output_arrays = array(); 
foreach ($input_arrays as $array) { 

// Convert the input array into a useful Event object 
$event = new Event($array, $timezone); 

// If the event is in-bounds, add it to the output 
if ($event->isWithinDayRange($range_start, $range_end)) { 
    $output_arrays[] = $event->toArray(); 
} 
} 

// Send JSON to the client. 
echo json_encode($output_arrays); 

Wenn ich die get-events.php Seite auf seine eigene betreibe ich bekommen, was ich nehme an wird ein korrekt codierter JSON zurückgegeben, ein Beispiel im Array ist ...

{"id":20,"title":"Executive Committee Meeting","start":"2017-05-01T00:00:00","url":"meeting_info.php?ID=20"} 

Kann mir jemand sagen, was ich falsch gemacht habe?

+1

Sie müssen json_encode() auf einem vollständigen Array von PHP-Objekten ausführen, nicht auf jedem einzeln. Fügen Sie in Ihrer Schleife jedes Emp zu einem Array hinzu und codieren Sie dann das Array, wenn die Schleife endet. Wenn Sie auf der Registerkarte Netzwerk Ihres Browsers nach dem Ergebnis Ihrer ajax-Anfrage suchen, werden Sie wahrscheinlich eine Reihe einzelner Objekte sehen, die jedoch nicht in Array-Klammern eingeschlossen und nicht durch Kommas getrennt sind, was bedeutet, dass JSON ungültig ist . Es gibt auch eine gute Chance, es gibt eine Fehlermeldung in der Konsole auch über das ungültige Datenformat – ADyson

+1

@ADyson es als Antwort gibt! :-) –

+0

@Don'tPanic guter Punkt, ich sollte wirklich, ich bin 99% sicher, das ist die Antwort. Erledigt! – ADyson

Antwort

1

Sie benötigen json_encode() auf einer kompletten Reihe von PHP-Objekten ausführen können, nicht auf jedem einzeln. Fügen Sie in Ihrer Schleife jedes Emp zu einem Array hinzu und codieren Sie dann das Array, wenn die Schleife endet.

Wenn Sie in der Registerkarte Netzwerk Ihres Browsers auf das Ergebnis Ihrer Ajax-Anfrage schauen, denke ich, dass Sie sehr wahrscheinlich eine Reihe einzelner Objekte sehen, aber nicht in Array-Klammern und nicht durch Kommas getrennt , was bedeutet, dass der JSON ungültig ist. Es besteht auch die Möglichkeit, dass in der Konsole Ihres Browsers eine Fehlermeldung über das ungültige Datenformat angezeigt wird. Es empfiehlt sich, dies zu überprüfen, anstatt davon auszugehen, dass Ihr JSON korrekt ist. Es gibt auch Online-JSON-Validierungswerkzeuge, in die Sie es einfügen können, um JSON isoliert zu validieren.

So etwas sollte besser funktionieren:

$events = array(); 

while(!$JAN->atEnd()) {    
    e = new Emp(); 
    $e->id = $JAN->getColumnVal("ID"); 
    $e->title = $JAN->getColumnVal("TITLE"); 
    $e->start = $JAN->getColumnVal("DATE")."T".$JAN->getColumnVal("TIME"); 
    $e->url = "meeting_info.php?ID=".$JAN->getColumnVal("ID"); 
    $events[] = $e; //add event to the array 
    $JAN->moveNext(); 
} 

echo json_encode($events); //encode the whole array as a coherent piece of JSON 

//P.S. no need to run moveFirst really, since the request is going to end, and discard the resultset anyhow. Depending on your data access technique, you possibly need to close the recordset though, to avoid locking etc. 

Was Sie Ihren Code müssen zu generieren (und was fullCalendar erwartet), ist ein JSON-Array - hier ist ein einfaches Beispiel, das 2 Elemente (die Ereignisse):

[ 
    { "id":20, "title":"Executive Committee Meeting", "start":"2017-05-01T00:00:00", "url":"meeting_info.php?ID=20" }, 
    { "id":21, "title":"Another Boring Committee Meeting", "start":"2017-05-02T00:00:00", "url":"meeting_info.php?ID=21" } 
] 

Der Beispielcode, den ich oben angegeben habe, sollte ein Array generieren, das dasselbe Format wie dieses JSON-Beispiel hat.

+0

Ich folgte Ihrem Code (vielen Dank!), Und legte es in eine separate PHP-Datei, und es liefert ein perfektes JSON-Array, danke! Ich bin immer noch verwirrt darüber, wie dieses neue JSON-Array in die Datei get-events.php integriert werden kann, die von Full Calendar aufgerufen wird. Die Datei get-events.php scheint die JSON-Details aus einer statischen Datei zu entschlüsseln. Wie kann ich das integrieren? Ich bin so verwirrt! –

+0

Ich bin auch dann verwirrt. Was du mir oben gezeigt hast, war eine Probe von get-events.php. Alles, was ich oben getan habe, ist ein kleines Beispiel aus Ihrem get-events.php-Code und ändern Sie es leicht. Sie müssen nur das relevante Bit Ihres vorhandenen Codes in dieser Datei mit meiner Version ersetzen.Ich weiß nicht, was Sie mit "Entschlüsselung aus einer statischen Datei" meinen - der Wortlaut Ihrer Frage besagt eindeutig, dass Sie den Datenbankcode herausgenommen haben, also holen Sie vermutlich Ihre Ereignisse aus einer Datenbank ab. Wo kommt eine statische Datei hinein? – ADyson

+0

P.S. Der JSON, den ich oben angegeben habe, ist nur ein Beispiel für die gewünschte Ausgabe, die hoffentlich von der aktualisierten Version des PHP-Codes generiert wird, es ist nichts, was Sie Ihrer Anwendung hinzufügen müssen. Es ist ein Beispiel dessen, was Sie in den Entwicklertools Ihres Browsers sehen können, wenn Sie die Antwort von der Ajax-Anfrage auf get-events.php prüfen. – ADyson

Verwandte Themen