来自ajax调用的全日历显示事件

时间:2019-07-26 08:26:50

标签: json ajax fullcalendar

我已经阅读了很多有关我的问题的帖子,但没有一个回答我的问题。 这是我的代码:

events: function(start, end, callback){ 
      var rcn = document.getElementById("rcn").value;
      $.ajax({
            type: 'GET',
            url: 'AJAX_selectEvent.do',
            data: {
                'rcn' : rcn
            },
            dataType: 'json',
            headers : {
                Accept : "application/json; charset=utf-8",
                "Content-Type" : "application/json; charset=utf-8"
            },
            success: function(data) {
                var events = [];
                $(data).each(function() {
                    events.push({
                        id: $(this).attr('id'),
                        title: $(this).attr('title'),
                        start: $(this).attr('start'),
                        end: $(this).attr('end'),
                        resourceId: $(this).attr('resourceId')
                    });
                });
                console.log("Ajax call success");
                console.dir(events);
                callback(events);
            },
            error : function(data) {
                console.log(data);
                alert("Ajax call error");
            }
        });
  },

如您所见,我正在从参数“ rcn”中获取JSON数据。在我的成功功能中,我可以看到它,但是它不会显示在日历中。我收到警告:

VM1608 main.js:5162 undefined (26) [{…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}]

使用console.dir(data),我可以看到(当然有26行):

  

Array(26){id:“ 0”,标题:“ 50602378”,开始:“ 08/07/19”,结束:“ 09/07/0019”,resourceId:“ p”}

您能帮助我理解为什么我从回调(事件)中收到警告,为什么它不显示事件吗?

谢谢

1 个答案:

答案 0 :(得分:1)

我无法重现您的确切警告。我使用您提供的示例数据(由Java输出)对代码进行了演示,但将示例数据粘贴到myjson.com上的虚拟端点URL中。参见http://jsfiddle.net/fpz1m2w4/。使用fullCalendar v3会产生错误

  

回调不是函数

其根本原因是您错误地指定了事件函数的参数。根据{{​​3}},参数应为function( start, end, timezone, callback )-您并未指定所有参数,因此您要调用的变量callback实际上包含时区。 JavaScript仅使用参数的位置来确定要传递给它的内容,而不是名称-名称实际上可以是您喜欢的任何名称(因此function(a, b, c, d)的作用相同,尽管尚不清楚维护)。

如果您修复了该错误,则代码应该可以正常工作-演示:v3 docs


但是,我实际上不需要任何这些。您的Java(因为您更改了日期格式)似乎已经以fullCalendar期望的正确格式生成了数据。因此,您不需要执行所有这些额外处理。您实质上是在重新创建具有相同结构的数组,因此显然这毫无意义。

(此外,请注意,访问响应的属性不需要$(this).attr('id')之类的代码-JSON数据被解析为普通的JS对象,因此this.id会产生相同的结果结果。.attr()语法仅在试图从结构更复杂的jQuery对象(表示HTML元素)或XML节点中获取时才需要。

相反,您应该只能使用http://jsfiddle.net/fpz1m2w4/1/模式,在该模式中,您只需为fullCalendar提供服务器URL,并提供一些简单的选项,例如获取您的rcn值的回调,fullCalendar将负责构造AJAX请求,接收响应并将数据加载到日历中。

这是您需要的代码:

events: {
  url: "AJAX_selectEvent.do",
  data: function() {
    return {
      "rcn": document.getElementById("rcn").value
    }
  },
  error: function(data) {
    console.log(data);
    alert("Ajax call error");
  }
}

这是使用虚拟URL的演示:events as a JSON feed