使用带有Slim和AJAX的fullcalendar.io

时间:2015-07-08 14:10:50

标签: php ajax json fullcalendar slim

使用slim框架,我创建了一条路径,从数据库中选择一条记录并将其编码为json并将其呈现为视图。

<?php
    $app->get('/calendar/json', function() use ($app) {

        $events = $app->Calendar->all();

        $events = json_encode($events);

        $app->render('calendar/json.json', array(

            "events" => $events     

        ));

    })->name('calendar.json');

?>

显示此结果

 [{"id":"1","title":"Test Event","start":"2015-07-01"},{"id":"2","title":"Test Event 2","start":"2015-07-09"}] 

使用jQuery full calendar library,我想使用ajax将此数据提取到日历中。

使用外部Json文件关闭其网站的示例后,数据将显示在calandar上。

  $('#calendar').fullCalendar({
      header: {
        left: 'prev,next today',
        center: 'title',
        right: 'month,agendaWeek,agendaDay'
      },
     editable: true,
     eventLimit: true,
     events: {
        url: "data.json",
        }
    });

如果我复制了这个但是更改了URL参数来访问我的视图,则不会显示数据,但是它的格式是相同的。

 var url = "{{ urlFor('calendar.json') }}";     

 url: url,

这是我在jQuery中替换访问视图的方法,这是访问视图的正确方法,还是视图无法呈现,因为我不是直接在视图的页面上。

1 个答案:

答案 0 :(得分:1)

<强>首先

你的Json不能有效Json,因为你没有设置Content-Type - 所以我认为它将是text/html(或者其他)而不是application/json

所以设置它并直接将Json作为Response-body返回:

$app->response()->header('Content-Type', 'application/json');
$app->response()->setBody($events);

此外,您不需要空视图。

<强>第二

docs中有一个基本示例,没有一些自定义参数,“说”您可以直接将网址传递为events

$('#calendar').fullCalendar({
    events: '/myfeed.php'
});