【发布时间】:2010-02-22 22:04:41
【问题描述】:
我正在使用jQuery Week Calendar 并试图让它工作,但我不知道为什么会引发错误。
日历有一个方法可以返回一个事件列表来填充它自己。
该方法(使用预设事件进行演示)如下所示:
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":6,
"start": new Date(year, month, day, 10),
"end": new Date(year, month, day, 11),
"title":"I am read-only",
readOnly : true
}
]
};
}
我对其进行了更改,以便它使用 jQuery GET 到另一个将返回真实日期列表的页面。为了测试,我保留了相同的测试数据,只是为了看看帖子是否正确完成。
该方法将调用页面,并在responseText 属性中返回此。
{
events : [
{
'id':1,
'start': new Date(2010, 2, 22, 12),
'end': new Date(2010, 2, 22, 13, 30),
'title':'Lunch with Mike'
},
...
{
'id':6,
'start': new Date(2010, 2, 28, 10),
'end': new Date(2010, 2, 28, 11),
'title':'I am read-only',
readOnly : true
}
]
}
我缺少的两种方法之间有区别吗?这两个对象在我看来完全一样,除了第二个使用 ' 而不是 ",因为它是通过 C# 编写的,并且它不使用年/月/日变量。
问题是第二种方法抛出一个错误,说“G 未定义”,jQuery 有什么理由不喜欢我返回的 JSON 对象吗?
编辑:我想我找到了错误的根源。在其中一个方法中有一个这样的 if 语句:
if (typeof options.data == 'string') {
if (options.loading) options.loading(true);
var jsonOptions = {};
jsonOptions[options.startParam || 'start'] = Math.round(weekStartDate.getTime() / 1000);
jsonOptions[options.endParam || 'end'] = Math.round(weekEndDate.getTime() / 1000);
$.getJSON(options.data, jsonOptions, function(data) {
self._renderEvents(data, $weekDayColumns);
if (options.loading) options.loading(false);
});
}
else if ($.isFunction(options.data)) {
options.data(weekStartDate, weekEndDate,
function(data) {
self._renderEvents(data, $weekDayColumns);
});
}
当只是在 getEventData() 中输出 JSON 对象(第一种方式)时,它会遇到 else 语句,因为它被识别为一个函数(我猜),但是当我执行 ajax GET 时,它被认为是一个字符串并且进入 if。
有没有办法让它被识别为一个函数?我尝试将返回值括在大括号中,将 dataType 更改为脚本并使用 eval() 将结果转换为函数,但这些似乎都不起作用。
【问题讨论】:
标签: c# asp.net jquery ajax json