Почему fullcalendar не анализирует JSON?

Резюме

У меня настроен fullcalendar, и я пытаюсь отобразить в нем данные, используя источник событий JSON, как описано в их документации здесь.

Я продолжаю получать следующее сообщение об ошибке Failure parsing JSON.

Вещи, которые я пробовал

Это JSON, который вызовет сообщение об ошибке [{"title":"Lorem Ipsum","start":"2019-04-01","end":"2019-04-02"},{"title":"The Test","start":"2018-09-01","end":"2018-09-02"}]

Я использую fullcalendar версии 4.0.2.
Я проверил json, который мой PHP-код возвращает в линтере.
Я добавил заголовок Content-Type: application/json к ответу json.
Я попытался использовать хук eventDataTransform для вернуть образец JSON, найденный в документации полного календаря здесь (см. код в истории редактирования)

~~ Странно то, что когда я помещаю вышеуказанный JSON непосредственно в свой javascript в параметре events, он действительно работает. ~~ РЕДАКТИРОВАТЬ: Как указали Джароманда X и Квентин, это массив javascript, а не JSON.

Код

    var calendar = new FullCalendar.Calendar(calendarEl, {
        plugins: [ 'dayGrid' ],
        defaultView: 'dayGridMonth',
        locale: 'nl',
        events: '/fullcalendar/json.php'
    });

Я ожидаю, что мой json может быть проанализирован, поскольку ответ такой же, как и тот, который я даю непосредственно опции events

Дополнительная информация

Содержимое файла json.php

<?php
header('Content-Type: application/json');
echo json_encode([
    [
        'title' => 'Lorem Ipsum',
        'start' =>  '2019-04-01',
        'end' =>  '2018-04-02'
    ],
    [
        'title' => 'The Test',
        'start' =>  '2018-09-01',
        'end' =>  '2018-09-02'
    ]
]);exit;

Я попытался изменить метод на GET, который не помог.

Я приложил скриншот ответа, который я вижу на вкладке сети инспектора ответ JSON в инспекторе< /а>


person Smit    schedule 16.04.2019    source источник
comment
events: [{"title":"Lor .... }] это не JSON, а events: '[{"title":"Lorem ... 9-02"}]' это   -  person Jaromanda X    schedule 16.04.2019
comment
JSON в строке ниже — это массив JavaScript, а не JSON. benalman.com/news/2010/03 /там-нет-такой-вещи-как-a-json   -  person Quentin    schedule 16.04.2019
comment
Я подозреваю, что method: 'POST', должно быть method: 'GET',, но это всего лишь предположение. Ожидает ли ваша конечная точка fullcalendar/json.php запрос POST?   -  person Rocky Sims    schedule 16.04.2019
comment
@JaromandaX Спасибо за ваш комментарий. Это объясняет, почему нет сбоев в анализе этого «json», потому что это не так.   -  person Smit    schedule 16.04.2019
comment
Я заметил, что в функции-обработчике eventDataTransform вы возвращаете массив с одним объектом в нем. Я почти уверен, что вам нужно вернуть только объект (не завернутый в массив).   -  person Rocky Sims    schedule 16.04.2019
comment
@RockySims Я пробовал это, но это не устраняет ошибку.   -  person Smit    schedule 16.04.2019
comment
попробуйте использовать events: '/fullcalendar/json.php'. Fullcalendar должен обработать этот вызов. Не забудьте изменить дату ваших событий, иначе вы можете получить пустой ответ. Также обратите внимание на вкладку сети в браузере, чтобы увидеть, какой полный календарь дат привязан к концу вашего URL-адреса /fullcalendar/json.php.   -  person khan    schedule 16.04.2019
comment
@khan Спасибо за предложение, но, к сожалению, это не помогло. Я постараюсь удалить как можно больше окружающего кода и посмотреть, смогу ли я заставить его работать таким образом. Если я найду ответ, я обновлю пост.   -  person Smit    schedule 16.04.2019
comment
чего вы пытаетесь достичь с помощью функции eventDataTransform?   -  person John    schedule 16.04.2019
comment
@John Первоначально я не собирался использовать это, но когда я увидел ошибку failure to parse json и когда я не смог увидеть ошибку в своем ответе json. Я хотел исключить вещи, поэтому я попытался просто дать fullcalender объект, который, как я думал, он хотел, в этом обработчике событий. Однако это не сработало.   -  person Smit    schedule 16.04.2019
comment
У вас есть два ключа events, но будет использоваться только последний   -  person Justinas    schedule 16.04.2019
comment
@Justinas Я поместил оба ключа событий в код, чтобы вам было легче увидеть, что я пробовал. Я обновил код, чтобы предотвратить дальнейшую путаницу, если кто-то, у кого может быть такая же проблема, читает это, пожалуйста, проверьте изменения в моем сообщении для более старого кода (это может помочь, а может и не помочь).   -  person Smit    schedule 16.04.2019


Ответы (2)


Я боюсь, что мое решение, вероятно, никому не пригодится, но вот оно.

Ошибка была вызвана следующей строкой кода js в нашем основном файле js.

  if($('table').length > 0){
         $('table').wrap('<div class="table-scroll"></div>');
    }

Эта строка испортила вывод HTML, который генерирует fullcalender, что затем вызвало ошибку failure parsing json.

person Smit    schedule 16.04.2019
comment
Несмотря на то, что, скорее всего, ни у кого больше не будет такой точной причины, простое знание того, как вы ее решили, может кому-то оказаться полезным. Спасибо, что не поленились опубликовать свое решение. - person Rocky Sims; 17.04.2019

Я попробовал ваш код на php-странице и вызвал полный календарь, поскольку events: '/fullcalendar/json.php' я не знаю, что вызывает у вас проблемы. Работает идеально.

<?php
 header('Content-Type: application/json');
 echo json_encode([
   [
    'title' => 'Lorem Ipsum',
    'start' =>  '2019-04-16T13:00:00',
    'end' =>  '2019-04-17T14:00:00'
   ],
   [
    'title' => 'The Test',
    'start' =>  '2019-04-16T10:00:00',
    'end' =>  '2019-04-17T13:00:00'
   ]
]);

Однако учитывайте и ваши даты. Ваше начало — 2019 год, а конец — 2018 год. Также укажите время, чтобы увидеть, где проходят ваши мероприятия.

person khan    schedule 16.04.2019
comment
Я также взял только код, необходимый для полного календаря, и он работает. Проблема кроется в другом. Если я найду решение, я опубликую его здесь. Спасибо, что нашли время посмотреть на мою проблему. - person Smit; 16.04.2019