我正在使用jQuery FullCalendar插件来处理我正在处理的项目,并且我正在尝试在日历中呈现从请求返回到Java servlet的事件。 servlet将返回一个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>
<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应该从servlet返回,并且数据的解析也正常工作。但是,事件本身不会呈现在日历中。我不完全确定events
和eventSources
之间有什么区别,但我已经尝试了两者并且都没有正常工作。任何想法 - 为了所有意图和目的 - 插件不会呈现看起来像文档所指示的事件数组中的事件?如果您需要更多详细信息或代码,请告诉我们;我生成了一个上面的必需品的模拟,所以这不是我的整个代码。
答案 0 :(得分:1)
我知道我还没有收到任何关于这个问题的答案,但我想我已经设法解决了我的问题。我的servlet返回的XML文件的<title>
标签有时无效;一些标题包含无效的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("<");
}
else if (character == '>') {
result.append(">");
}
else if (character == '\"') {
result.append(""");
}
else if (character == '\'') {
result.append("'");
}
else if (character == '&') {
result.append("&");
}
else {
result.append(character);
}
character = iterator.next();
}
return result.toString();
}