关于javascript:JS,fullcalendar,“events”参数没有得到执行函数的结果

JS, fullcalendar, the “events” parameter doesn't get the result of an executed function

本问题已经有最佳答案,请猛点这里访问。

回答:错误不在同步或异步调用中,而在于使用fullcalendar设置的函数。
事件:功能(开始,结束,时区,回调){...}

我可以看到信息切换我如何管理ajax(sjax ...)的结果,但日历没有获取信息。

似乎行"events:getJSON"不起作用。 但功能是通话

现在,我有一个新问题,函数getJSON从webmethod获取JSON,但日历不显示它们。

我也尝试用注释代码获得结果,但它不起作用。

这里有来自js的两种方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
function getJSON() {
    start = $('#calendar').fullCalendar('getDate').format();
    duration = $('#calendar').fullCalendar('getCalendar').moment().format();
    alert(start);
    var retour;
    $.ajax({
        async: false,
        type: 'POST',
        url:"ConsultationPlanning.aspx/getPlanning",
        data: '{"start":"' + start + '","end":"' + duration + '"}',
        contentType:"application/json; charset=utf-8",
        dataType:"json",
        success: function (msg) {
            retour = JSON.parse(msg.d);
            retour = msg.d;
        },
        error: function () { alert("erreur");}
    });
    alert(retour);
    return retour;
};

$('#calendar').fullCalendar({
    header: {
        left: 'prev,next today',
        center: 'title',
        right: 'month,agendaWeek,agendaDay'
    },
    hiddenDays: [0],
    defaultView: 'agendaWeek',
    editable: false,
    allDaySlot: false,
    selectable: false,
    events: getJSON,
        /*function (start, end, callback) {
        start = $('#calendar').fullCalendar('getDate').format();
        duration = $('#calendar').fullCalendar('getCalendar').moment().format();
        $.ajax({
            type: 'POST',
            url:"ConsultationPlanning.aspx/getPlanning",
            data: '{"start":"' + start + '","end":"' + end + '"}',
            contentType:"application/json; charset=utf-8",
            dataType:"json",
            success: function (msg) {
                var rdv = [];
                alert(msg.d);
                //var events =JSON.parse(msg.d);
                $(msg.d).each(function () {
                    rdv.push({
                        id: $(this).attr('id'),
                        title: $(this).attr('title'),
                        start: $(this).attr('start'),
                    })
                })
                alert("first date :" + rdv[0].start);
                //"first date: 2015-05-06T14:33:00" is what i get
                callback(rdv);
                //the callback generate an error message. it says, it's waiting for a function

            }
        })
    }
});

我几天前发布了一个类似的问题,但它是在另一个实现中:

fullcalendar不显示事件


$.ajax触发异步调用; 只有在浏览器收到对其请求的响应后,retour变量的值才会设置为您期望的值。

这就是使用callback参数调用fullcalendar的events的原因:

1
2
3
4
5
6
7
8
9
10
11
function getJSON(start, end, callback) {
    ...
    $.ajax({
        ...
        success : function(msg) {
            retour = JSON.parse(msg.d);
            callback(retour);
        }
    });
    // no need to return anything here
}

请参阅fullcalendar v1的文档。* here:events function

注意:如果您使用的是fullcalendar v2或更高版本,则应将功能签名更改为:

1
2
function getJSON(start, end, timezone, callback) {
     ...

请参阅doc for v2。* here:events function