#php #javascript #jquery #ajax #json
#php #javascript #jquery #ajax #json
Вопрос:
Я пытаюсь интегрировать плагин FullCalendar в веб-сайт. Проблема, с которой я сталкиваюсь, заключается в том, что я пытаюсь отправить текущее представление, будь то месяц, повестка дня и т.д., В качестве пользовательского параметра с помощью метода json / $.ajax.
$('#calendar').fullCalendar({
events: {
url: 'feed.php',
type: 'POST',
data: {
view: $('#calendar').fullCalendar('getView').name
},
error: function() {
alert('there was an error while fetching events!');
}
}
});
Приведенное выше возвращает любые ошибки, но пользовательская view
переменная не передается вместе с обычными значениями.
Я попробовал следующее:
$('#calendar').fullCalendar({
events: {
url: 'feed.php?view=' $('#calendar').fullCalendar('getView').name,
.......
Но это просто добавляет ?view=undefined
к вызову ajax. Я знаю, что это $('#calendar').fullCalendar('getView').name
работает, поскольку возвращает правильное значение, поэтому это должно быть что-то со строкой view: $('#calendar').fullCalendar('getView').name
, но я не уверен, что именно.
Ответ №1:
Просто подумал, что я бы добавил свое решение этой проблемы для дальнейшего использования.
Просто определив количество дней между отметками времени start
и end
, переданными FullCalendar на мой серверный php, я мог определить, для какого представления мы извлекали данные.
$NumberOfDaysInView = abs($_GET['start'] - $_GET['end'])/60/60/24;
Надеюсь, это поможет!
Ответ №2:
Похоже, вы пытаетесь получить доступ к полному календарю до того, как он был инициализирован. Попробуйте разбить это на отдельные шаги:
$('#calendar').fullCalendar();
var viewName = $('#calendar').fullCalendar('getView').name;
$('#calendar').fullCalendar({
events: {
url: 'feed.php',
type: 'POST',
data: {
view: viewName
},
error: function() {
alert('there was an error while fetching events!');
}
}
});
Комментарии:
1. Используя этот метод, как бы я обновил переменную viewName, когда пользователь переключает представление?
2. На самом деле у вас была бы та же проблема с вашим исходным кодом (если бы он работал). Вызов ‘getView’ выполняется сразу, а не при выполнении запроса ajax. Я недостаточно знаком с FullCalendar, чтобы предложить вам хорошее решение.
Ответ №3:
Это потому, что вы вызываете «FullCalendar()» перед инициализацией, и это не разрешено делать.
$('#calendar').fullCalendar({...});
Это означает, что $ (‘#calendar’) (объект jquery) будет инициализирован значениями, которые вы отправили в {…}.
Таким образом, до завершения инициализации FullCalendar() вы не можете его использовать.
Ответ №4:
Полный календарь v4 и после
// import FullCalendar like so:
// import { Calendar } from '@fullcalendar/core';
// then initialize Full Calendar on your element
let calendarEl = document.getElementById('calendar');
let calendar = new Calendar(calendarEl, {
// all your calendar settings except the events one
});
// then add your events source and configure it to send the calendar current view
calendar.addEventSource({
url: "/url_of_your_events",
extraParams: function() {
return {
viewName: calendar.view.type,
};
},
});
// then render your calendar
calendar.render();
Полный календарь v3 и до использования jQuery
$("#calendar").fullCalendar({
// all your calendar settings
// ...
// configure the event source to send the calendar current view
events: {
url: "/url_of_your_events",
data: function() {
return { view: $('#calendar').fullCalendar('getView').name };
},
},
});