我正在尝试为Adam Shaw jquery完整日历设置JSON Feed,并且可以在Chrome中使用,但在FireFox/IE中使用。在以后的版本中,浏览器拒绝将约会作为JSON字符串传递,除非它们是硬编码的。
我花了一天的时间,在尝试了许多JSON派生之后,我发现了一个有效的代码示例,但无法用我的数据动态复制它。最后,我发现不同之处在于剪切和粘贴的代码片段是硬编码的。
Fullcalendar似乎可以容纳许多不同类型的JSON(数组/对象),但出于某种原因,IE知道PHP字符串是硬编码的还是只是从变量中返回的。是否发送了一些信息,让它知道服务器端发生了什么?
我的PHP看起来是这样的(foreach被设置为使用Zend-db行集):
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在某种程度上发生了更改时,会是这样吗?有人在其他地方见过这个吗?
相关代码的最后一位是完整日历设置选项:
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
}
尝试在事件源中将数据类型设置为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
}
好吧,我花了很长时间才弄明白。
然而,我想我会把对我有用的东西传下去,以防有其他IE用户。
这个问题似乎是日期格式的问题。由于某些原因,IE基本上比chrome更敏感。
我在此链接上找到了正确格式的引用
http://arshaw.com/fullcalendar/docs/event_data/Event_Object/
'您可以指定IETF格式的字符串(例如:"Wed,18 Oct 2009 13:00:00 EST")、ISO8601格式的字符串或UNIX时间戳。'
不管出于什么原因,如果我使用IS8601,它在IE9中运行得很好。这基本上包括在日期后插入一个"T"。
希望有人觉得这个有用。