2017-10-10 12 views
0

CodeigniterでjQuery Fullcalendarを使用しています。まず、私はスケジュールの時間と名前のテーブルを持っています。私はカレンダーページを読み込んでいるときにfullcalendar.jsにデータを送信していますが、私はAjaxレスポンスでしたいです。私はどのように進行していますか?私を助けてください。jquery fullcalendarのajaxレスポンスによるカレンダーイベントの送信方法

私は以下のコードを試しました。

function get_locationdata(start, end) { 
    $.ajax({ 
     type: "POST", 
     url: '<?php echo base_url(); ?>/index.php/Task_controller/get_schedulelocationsdata',  
     data: { 
      start: start, 
      end: end, 
      user_id: user_id 
     }, 
     success: function(resp) { 
      defaultEvents = resp; 
     } 
    }); 
} 

defaultEvents = resp; 

<script src = '<?php echo base_url(); ?>assets/plugins/fullcalendar/dist/fullcalendar.min.js'></script> 
<script src = "<?php echo base_url(); ?>assets/pages/jquery.fullcalendar.js"></script> 

defaultEvents私はjquery.fullcalendar.js に送信され、RESPで、私はjson_encoded data.IはAjaxのレスポンスを使用してfullcalendar.jsにイベントを送信したい取得しています配列です。

+0

通常はfullCalendarにイベントデータの場所を伝えます。URLを直接指定するか(fullCalendarが指定するものに準拠する場合は、https://fullcalendar.io/docs/event_data/events_json_feed/)。あなたがPOST要求を使用しているので、それは準拠していないので、あなたがそれを変更することができなければ、代わりにこのパターンを使うことができます:https://fullcalendar.io/docs/event_data/events_function/。あなたの更新されたコードはここにあります – ADyson

+0

PS「jquery.fullcalendar.js」はjQueryのコピー、またはfullCalendarのコピーですか?jqueryの場合、それは_before_ fullCalendarに追加する必要があります(また、 https://fullcalendar.io/docs/usage/)fullCalendarの別のコピーであれば、その上の行にfullCalendarを既にロードしているため、削除する必要があります。 – ADyson

+0

jquery.fullcalendar.js fullcalendarのコピーです。 – Anuradha

答えて

1

イベントを取得する最も簡単な方法は、フィードをPOSTフィードからGETに変更することです。次に、URLをFullcalendarに渡すだけですべてが機能します。

これができない場合は、コードを変更する必要があります。あなたのAJAX呼び出しは非同期です。つまり、すぐに結果が得られず、その下にあるコード(例えば、2行目defaultEvents = resp;)は、AJAXから返された結果にアクセスできません - その時点では未定義です。

AJAXが完了したら、成功コールバックでFullcalendarを初期化する必要があります。これは、あなたのAJAX POSTがイベントcorrectly formatted and as expected by Fullcalendar(例えば、配列)のセットを返すと仮定します。正しい形式でない場合は、AJAX successコールバックで処理する必要があります。 Fullcalendarにイベントの静的なセットを提供することにより、そのかかわら

function get_locationdata(start, end) { 
    $.ajax({ 
     type: "POST", 
     url: '<?php echo base_url(); ?>/index.php/Task_controller/get_schedulelocationsdata', 
     data: { 
      start: start, 
      end: end, 
      user_id: user_id 
     }, 
     success: function(resp) { 
      // Now you have your event data, you can fire up Fullcalendar 
      initFullcalendar(resp); 
     } 
    }); 
} 

function initFullcalendar(events) { 
    $('#calendar').fullCalendar({ 
     // ... 
     events: events, 
    }); 
} 

// Fire everything off 
get_locationdata('2017-10-10', '2017-11-10'); 

注意、それはあなたがビューを変更すると、彼らは更新されないことを意味します。したがって、カレンダーのナビゲーションボタンをクリックして翌月に見ると、イベントは更新されません。 をすべての過去、現在、将来の予定をget_locationdata()の最初の通話に読み込まない限り、新しい月の新しい予定は表示されません。 viewRenderコールバックを含むいくつかの解決策が必要です。ビューが変更されたとき(新しい月にクリックするなど)、新しいAJAXリクエストを発行して新しいイベントを取得することができます。

+0

上記のコードを試しています。しかし、initFullCalendar関数で私はカレンダーを初期化しようとしています。しかし、イベントはカレンダーページに送られません。それが主な問題です。助けてください。 – Anuradha

+0

@AnuradhaあなたはあなたのAJAX呼び出し(上記の 'resp')からの応答を' initFullcalendar() 'に渡していますか?そしてそれは有効なイベントデータですか? –

+0

はい、私はajax呼び出しでデータを渡しています。respでは、データはjsonでエンコードされたデータとして送られます。 – Anuradha

関連する問題