0

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
    }
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 に答える