0

我正在尝试为 Adam Shaw jquery 完整日历设置 JSON 提要,并且可以让它在 Chrome 中工作,但在 FireFox/IE 中。在后面的浏览器拒绝呈现作为 JSON 字符串传递的约会,除非它们是硬编码的。

我为此花了一天时间,在尝试了许多 JSON 派生之后,我发现了一个有效的代码示例,但无法用我的数据动态复制它。最后我发现不同之处在于剪切和粘贴的代码片段是硬编码的。

Fullcalendar 似乎非常适合许多不同类型的 JSON(数组/对象),但由于某种原因,IE 知道 PHP 字符串是硬编码的还是只是从变量中回显的。是否发送了一些信息,让它知道服务器端发生了什么?

我的 PHP 看起来像这样(foreach 设置为与 Zend db-rowset 一起使用):

foreach($rowset as $row){
            $apptArray = array();
            $apptArray['title'] = $row -> title; 
            $apptArray['allDay'] = ''; 
            $apptArray['id'] = $row -> appt_id; 
            $apptArray['participants'] = $row -> participants; 
            $apptArray['organizer'] = $row -> organizer; 
            $apptArray['propId'] = $row -> prop_id; 
            $apptArray['reason'] = $row -> reason; 
            $apptArray['start'] = date('Y-m-d  H:i:s', $row -> start); 
            $apptArray['end'] = date('Y-m-d  H:i:s', $row -> end); 
            array_push($jsonArray,$apptArray);

            }
            echo json_encode($jsonArray);

如果我只是在浏览器中加载 JSON 提要 url,则会返回一个如下所示的 JSON 字符串:

[
{
    "title":"Lunch",
    "allDay":"",
    "id":"9",
    "participants":"456",
    "organizer":"36",
    "propId":"14",
    "reason":"to meet",
    "start":"2012-10-12 11:00:00",
    "end":"2012-10-12 11:30:00"
 },
 {
    "title":"dd",
    "allDay":"",
    "id":"15",
    "participants":"45",
    "organizer":"36",
    "propId":"45",
    "reason":"meet again",
    "start":"2012-10-12 09:00:00",
    "end":"2012-10-12 09:30:00"
 }

]

这就是事情变得奇怪的地方。如果 fullCalendar 从我的脚本中调用它,它不会呈现任何约会。但是,如果我采用上面相同的字符串,对其进行硬编码,然后直接回显 JSON 字符串。字符串渲染得很好。(见下文)

echo '[{"title":"Lunch","allDay":"","id":"9","participants":"456","organizer":"36","propId":"14","reason":"to eet","start":"2012-10-12 11:00:00","end":"2012-10-12 11:30:00"},{"title":"dd","allDay":"","id":"15","participants":"45","organizer":"36","propId":"45","reason":"asdf","start":"2012-10-12 11:00:00","end":"2012-10-12 11:30:00"}]';

这可能是当我的脚本在浏览器中显示的 JSON 以某种方式更改时?有没有人在其他地方遇到过这个?

相关代码的最后一点是 fullcalendar 设置选项:

eventSources:[
                  {
        url: 'http://local/tenant/calendar/apptsfeed',
        type: 'POST',
        success: function(response) {
             alert('this has worked');

        },
        error: function(response) {
            alert('error');

        },
        color: 'yellow',   // a non-ajax option
        textColor: 'black' // a non-ajax option
    }
4

2 回答 2

0

尝试将数据类型dataType: 'json'放在您的事件源中并查看。

eventSources:[
              {
    url: 'http://local/tenant/calendar/apptsfeed',
    type: 'POST',
    dataType: 'json',
    success: function(response) {
         alert('this has worked');

    },
    error: function(response) {
        alert('error');

    },
    color: 'yellow',   // a non-ajax option
    textColor: 'black' // a non-ajax option
}
于 2012-10-15T09:42:06.427 回答
0

好吧,这花了我很长时间才弄清楚。

但是,我想我会传递对我有用的东西,以防万一还有其他 IE 用户。

该问题似乎是日期格式问题。出于某种原因,基本上 IE 比 chrome 更敏感。

我在此链接http://arshaw.com/fullcalendar/docs/event_data/Event_Object/上找到了对正确格式的引用

'您可以指定 IETF 格式的字符串(例如:“Wed, 18 Oct 2009 13:00:00 EST”)、ISO8601 格式的字符串(例如:“2009-11-05T13:15:30Z”)或 UNIX时间戳。

无论出于什么原因,如果我使用 IS8601,它在 IE9 中工作得很好。这基本上涉及在日期后插入“T”。

希望有人觉得这很有用。

于 2012-10-23T02:19:55.713 回答