Полный календарь — отправка представления через ajax

#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 };
        },
    },
});