【问题标题】:How to send calendar events through ajax response in jquery fullcalendar如何在jquery fullcalendar中通过ajax响应发送日历事件
【发布时间】:2017-10-10 11:35:04
【问题描述】:

我正在使用带有 Codeigniter 的 jQuery Fullcalendar。首先,我有一张带有日程安排时间和名称的表格。当我加载日历页面时,我正在向fullcalendar.js 发送数据,但我想要 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 的数组 相应地,我得到了json_encoded 数据。我想使用ajax 响应将事件发送到fullcalendar.js

【问题讨论】:

  • 通常您告诉 fullCalendar 您的事件数据的位置,或者直接通过提供 URL(如果它符合 fullCalendar 指定的内容,按照:fullcalendar.io/docs/event_data/events_json_feed。在您的情况下,因为您使用 POST请求,它不合规,所以除非你能改变它,否则你可以改用这个模式:fullcalendar.io/docs/event_data/events_function。试试这个。如果你卡住了,在这里发布你更新的代码。
  • P.S. “jquery.fullcalendar.js”是 jQuery 的副本,还是 fullCalendar 的副本?如果是 jquery,则应该在 before fullCalendar 之前添加(并且您还需要其他依赖项,例如 momentJS,根据 fullcalendar.io/docs/usage)。如果它是 fullCalendar 的另一个副本,那么您应该删除它,因为您已经在其上方的行中加载了 fullCalendar。
  • jquery.fullcalendar.js 是 fullcalendar 的副本。
  • 正如@ADyson 所说,您已经包含fullcalendar.min.jsjquery.fullcalendar.js 是什么?
  • 你的意思是它是你的完整日历代码,正在初始化你的日历吗?

标签: javascript jquery ajax codeigniter fullcalendar


【解决方案1】:

获取事件的最简单方法是将提要从 POST 提要更改为 GET。然后,您只需将 URL 传递给 Fullcalendar,一切正常。

如果这不可行,您将不得不重新安排您的代码。您的 AJAX 调用是异步的,这意味着它不会立即完成并获得结果,并且它下面的代码(例如第二行 defaultEvents = resp;)将无法访问从 AJAX 返回的任何结果 - resp 未定义于那一点。

因此,您需要在 AJAX 完成时在成功回调中初始化您的 Fullcalendar。这假设您的 AJAX POST 返回一组事件correctly formatted and as expected by Fullcalendar(例如一个数组)。如果它们的格式不正确,您需要在 AJAX success 回调中处理它们。

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');

请注意,通过向 Fullcalendar 提供一组静态事件,这意味着它们不会在您更改视图时更新。因此,如果您单击日历导航按钮查看下个月,事件将不会更新。除非您在最初的get_locationdata() 呼叫中加载所有过去、现在和未来的事件,否则您将看不到新月份的新事件。您需要想出一些涉及viewRender 回调的解决方案,这样当视图发生变化时(例如单击新月份),您可以触发新的 AJAX 请求以获取新事件。

【讨论】:

  • 我正在尝试上面的代码。但在 initFullCalendar 函数中,我试图初始化日历。但事件不会发送到日历页面。这是主要问题。请帮忙。
  • @Anuradha 您是否将 AJAX 调用(我上面的代码中的resp)的响应传递给initFullcalendar()?它是有效的事件数据吗?
  • 是的,我通过 ajax 调用传递数据,相应的数据将以 json 编码数据的形式出现。
  • @Anuradha 是valid event data吗?
  • 当我在控制器中加载页面时,我正在传递一些数据。这是工作。我正在 ajax 中加载更多数据,并且传递的数据与控制器数据相同。当时它不起作用。
猜你喜欢
  • 2016-09-25
  • 1970-01-01
  • 1970-01-01
  • 2013-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-11
  • 2013-10-27
相关资源
最近更新 更多