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