我正在尝试为 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
}