Adam Shaw jquery full calendar の JSON フィードをセットアップしようとしていますが、Chrome で動作させることができますが、FireFox/IE. 後者では、ブラウザーはハードコーディングされていない限り、JSON 文字列として渡された予定のレンダリングを拒否します。
私はこれに 1 日を費やし、多くの 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
}