从其中一个事件回调中调用JQuery.ajax或JQuery.post会导致Moment.min.js出现类型错误

时间:2014-07-06 10:01:28

标签: ajax callback fullcalendar typeerror momentjs

我正在使用FullCalendar制定计划,我遇到了一些障碍。我正在尝试使用事件回调函数来创建一个新事件,并将新事件的信息发送到我的php脚本,然后将该信息存储到服务器。但每当我尝试从其中一个回调中调用$ .ajax或$ .post时(我已尝试过,如果来自其中一些)我得到了这个:

Uncaught TypeError: Cannot read property 'month' of undefined moment.js:684
extend.monthsShort moment.js:684
e jquery.min.js:4
Bc jquery.min.js:4
Bc jquery.min.js:4
Bc jquery.min.js:4
n.param jquery.min.js:4
n.extend.ajax jquery.min.js:4
$.fullCalendar.select advisorSchedule.js:141
Q fullcalendar.min.js:6
s fullcalendar.min.js:7
a fullcalendar.min.js:7
(anonymous function) fullcalendar.min.js:6
d jquery.min.js:3
n.event.dispatch jquery.min.js:3
r.handle

但是因为我使用的是Moment.min.js,所以很难读出问题的来源,所以我用Moment.js替换了Moment.min.js,当错误再次弹出时,我能够阅读问题所在:

months : function (m) {
   return this._months[m.month()];
},

根据我收集的内容,m在执行此函数时未定义。 这是我用来将新事件数据发布到php脚本的代码:

select:function(start, end, jsEvent, view){
        CURRENT_SELECTION_START = start;
        CURRENT_SELECTION_END   = end;

        console.log(CURRENT_SELECTION_START + '-' + CURRENT_SELECTION_END);

        $.ajax({

            url:'../AJAX/save_event.php',
            type: 'POST',
            data: {
                Start_Time: start,
                Event_Title: prompt('Title'),
                End_Time: end
            },

        });
    },

3 个答案:

答案 0 :(得分:14)

我认为开始是一个时刻对象。

我遇到了同样的问题,似乎:您无法发送时刻对象,因此您需要将值作为整数或其他内容获取。

尝试使用start.calendar()start.format("YYYY-MM-DD");(或类似内容)代替start

为我工作,希望也适合你;)

帕特里克

答案 1 :(得分:7)

我只是遇到了同样的问题(这是我发现这篇文章的原因)。

要发送整个对象,您需要对其进行字符串化。

var now = moment();

$.ajax({
      url: 'http://example.com',
      contentType: 'application/json',
      data: JSON.stringify(now),
      type: 'POST'
});

答案 2 :(得分:6)

不要直接发送startend作为AJAX请求的参数。

var startDate = start.format('YYYY-MM-DD'),
    endDate = end.format('YYYY-MM-DD'),
    params = {'from':startDate, 'to':endDate};
$.ajax({
      url: 'http://example.com',
      contentType: 'application/json',
      data: params,
      type: 'POST'
    }).done(function(data) {
        console.log('Successful! ', data);
    });