Вызов 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);
});