Обратный вызов функции события jQuery FullCalendar не отображает мои события

#jquery #events #function #callback #fullcalendar

#jquery #Мероприятия #функция #обратный вызов #полный календарь

Вопрос:

Я использую подключаемый модуль jQuery FullCalendar для проекта, над которым я работаю, и я пытаюсь отобразить события в календаре, которые возвращаются из запроса в сервлет Java. Сервлет должен возвращать XML-документ, который я затем анализирую для создания события, прежде чем помещать его в необходимый массив, который я затем передаю функции обратного вызова.

Код

 <html>
    <head>
        <link rel="stylesheet" type="text/css" href="fullcalendar.css" />
        <script type="text/javascript" src="jquery.min.js"></script>
        <script type="text/javascript" src="fullcalendar.min.js"></script>
        <script type="text/javascript">
            $(document.ready(function() {
                $("#calendar").fullCalendar({
                    events: function(start, end, callback) {
                        $.get("servlet?command=getEvents", function(data) {
                            var events = [];
                            $(data).find("event").each(function() {
                                events.push({
                                    id: $(this).find("id").text(),
                                    title: $(this).find("title").text(),
                                    start: $(this).find("start").text(),
                                    end: $(this).find("end").text(),
                                    url: $(this).find("url").text()
                                });
                            }
                            callback(events);
                        }, "xml");
                    }
                });
            });
        </script>
    </head>
    <body>
        <div id="calendar"></div>
    </body>
</html>
  

XML, возвращенный из сервлета

 <xml>
    <event>
        <id>Event1</id>
        <title>Title1</title>
        <start>2011-10-18</start>
        <end>2011-10-19</end>
        <url>http://www.google.com</url>
    </event>
    // More Events...
</xml>
  

Теперь кажется, что XML возвращается из сервлета, как и должно быть, и синтаксический анализ данных тоже работает должным образом. Однако сами события не отображаются в календаре. Я не совсем уверен, в чем разница между events и eventSources , но я пробовал оба, и ни один из них не работал должным образом. Есть идеи, почему — по сути и целям — плагин не отображает события, которые, по-видимому, находятся в массиве событий, как продиктовано документацией? Дайте мне знать, если вам нужна дополнительная информация или код; Я сгенерировал макет необходимости выше, так что это не весь мой код.

Ответ №1:

Я знаю, что я еще не получил никаких ответов на этот вопрос, но я думаю, что мне удалось выяснить мою проблему. <title> Теги XML-файла, который возвращал мой сервлет, иногда были недействительными; некоторые заголовки содержали недопустимые символы XML, которые мне нужно было заменить перед отправкой файла обратно в вызов AJAX. Как только это было сделано с помощью следующей функции, указанной ниже, все мои события начали отображаться правильно. И да, я понимаю, что, вероятно, есть более эффективный способ удалить недопустимые символы с помощью регулярных выражений или чего-то еще, но все, что я пробовал, не работало. Эта функция, хотя и неэффективна, работает…

 protected static String forXML(String aText) {
    final StringBuilder result = new StringBuilder();
    final StringCharacterIterator iterator = new StringCharacterIterator(aText);
    char character =  iterator.current();

    while (character != CharacterIterator.DONE ) {
        if (character == '<') {
            result.append("amp;<");
        }
        else if (character == '>') {
            result.append("amp;>");
        }
        else if (character == '"') {
            result.append("amp;quot;");
        }
        else if (character == ''') {
            result.append("amp;#039;");
        }
        else if (character == 'amp;') {
            result.append("amp;amp;");
        }
        else {
            result.append(character);
        }
        character = iterator.next();
    }
    return result.toString();
}