我正在修改jQuery日历,并希望更改以下代码:
function getEventData() {
var year = new Date().getFullYear();
var month = new Date().getMonth();
var day = new Date().getDate();
return {
events : [
{
"id":1,
"start": new Date(year, month, day, 12),
"end": new Date(year, month, day, 13, 30),
"title":"Lunch with Mike"
},
{
"id":2,
"start": new Date(year, month, day, 14),
"end": new Date(year, month, day, 14, 45),
"title":"Dev Meeting"
},
{
"id":3,
"start": new Date(year, month, day + 1, 17),
"end": new Date(year, month, day + 1, 17, 45),
"title":"Hair cut"
},
{
"id":4,
"start": new Date(year, month, day - 1, 8),
"end": new Date(year, month, day - 1, 9, 30),
"title":"Team breakfast"
},
{
"id":5,
"start": new Date(year, month, day + 1, 14),
"end": new Date(year, month, day + 1, 15),
"title":"Product showcase"
},
{
"id":6,
"start": new Date(year, month, day, 10),
"end": new Date(year, month, day, 11),
"title":"I'm read-only",
readOnly : true
},
{
"id":7,
"start": new Date(year, month, day + 2, 17),
"end": new Date(year, month, day + 3, 9),
"title":"Multiday"
}
]
};
}
我想从PHP页面中的数据库中提取JSON数据。所以我必须看起来像:
function getEventData() {
$.getJSON('../ajax/calendar.php?type=get', function(data) {
return data;
});
}
但我收到一个错误,上面写着"Uncaught TypeError:无法读取未定义的属性‘options’",这与这里的数据呈现有关:
_renderEvents: function(data, $weekDayColumns) {
var self = this;
var options = this.options;
var eventsToRender;
if (data.options) {
var updateLayout = false;
//update options
$.each(data.options, function(key, value) {
if (value !== options[key]) {
options[key] = value;
updateLayout = updateLayout || $.ui.weekCalendar.updateLayoutOptions[key];
}
});
返回的JSON:
[{"id":"1","start":"Wed Jan 25 2012 11:30:00 GMT-0800 (PST)","end":"Wed Jan 25 2012 11:45:00 GMT-0800 (PST)","title":"test"}]
在PHP页面上进行了测试,JSON显示正常。有什么建议吗?
我假设_renderEvents: function(data, $weekDayColumns) {
中的data
是您使用getEventData()
方法检索的数据,然后将其存储在那里。在这种情况下,您需要等待data
实际拥有从ajax返回的内容。
在ajax完成之前,不能执行代码块_renderEvents: function(data, $weekDayColumns) {
。您可以将它封装在一个函数中,并在DataDone()上调用它,然后在getJSON回调中调用该函数。
var data = '';
function getEventData() {
$.getJSON('../ajax/calendar.php?type=get', function(result) {
data = result;
onDataDone();
});
}
function onDataDone() {
// code that wraps the _renderEvents: function(data, $weekDayColumns) {...
}
getEventData();
$.getJSON
异步运行,因此返回直到稍后才会执行。您可以同步运行ajax请求,也可以添加在ajax请求完成时调用的回调。