Вызов JQuery.ajax или JQuery.post из одного из обратных вызовов событий приводит к ошибке типа из Moment.min.js.

Я работаю по расписанию, используя 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.min.js на Moment.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 ответа

Я предполагаю, что начало - это момент-объект.

У меня была такая же проблема, и кажется: вы не можете отправить моментный объект, поэтому вам нужно получить значение в виде целого числа или чего-то еще.

Пытаться start.calendar() или же start.format("YYYY-MM-DD"); (или что-то подобное) вместо start,

работал для меня, надеюсь, для вас тоже;)

Патрик

У меня была точно такая же проблема (именно так я наткнулся на этот пост).

Чтобы отправить весь объект, вам нужно его завести.

var now = moment();

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

Не отправлять start а также end непосредственно в качестве параметров для запроса 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);
    });
Другие вопросы по тегам