我已经尝试让它工作好几个星期了,但都无济于事。我确信我的代码一定是因为一些相当小和愚蠢的事情而失败了,但是在尝试了多种不同的方法之后,我开始真正努力弄清楚问题可能是什么。还有其他人设法让 jQuery 周日历 ( http://github.com/themouette/jquery-week-calendar ) 与返回 JSON 的 HTTPHandler 一起使用吗?
我已经尝试过:
- 对 JSON 进行硬编码,使其以字符串形式从处理程序中出来(例如“events: [{ etc }]”)
- 尝试使用或不使用初始“事件:”
- 使用 LINQ 检索数据,然后使用 JavaScriptSerializer 进行序列化
- 改用 DataContractJsonSerializer
- 使用上述内容创建 ToJSON 方法
- 使用 $.getJson 检索数据
- 使用 $.get 代替
- 使用 $.ajax,并带有“async = false”
- 将数据调用放入函数中,然后通过以下方式调用该函数:
data: function(start, end, callback) { callback(getData()); }
这些似乎都不起作用。我什至尝试使用 $.get、$getJSON 和 $.ajax 在日历代码之前运行数据调用,例如:
$.getJSON('/content/handlers/GetScheduledAppointments.ashx', function(json) { $calendar.weekCalendar({ . . . data: json }); });
我尝试了很多不同的方法,我无法真正发布每个失败的代码示例,但如果有人可以帮助我,我将非常乐意在需要时发布一些示例。
有没有人设法让这两件事一起工作......?
最佳答案
对于与我有同样问题的其他人,我有一些可能对您有所帮助的建议。这些只是我发现对我有帮助的事情,并且只是对那些浪费了数周宝贵时间思考为什么看似很好的代码不起作用的人的指导。我很清楚我的技术很弱(老头),但如果它能帮助拯救一个人一些时间,那么我的时间还没有完全浪费。
这适用于 C# .NET 3.5 Web 表单,而不是 MVC。
首先,确保 Response 对象的 ContentType 和 ContentEncoding 属性设置为 JSON。过去我使用过“text/plain”,但这一次似乎对我不起作用:
context.Response.ContentType = "application/json";
context.Response.ContentEncoding = Encoding.UTF8;
如果使用 LINQ,按照日历期望的顺序和格式创建新对象将有助于最大限度地减少数据不规则问题。如果您需要只读约会,则只需将该选项添加到列表中即可。下面的“title”元素与 SQL 中的 ISNULL 或 COALESCE 一样工作,以防止返回空值:
var apps = (
from a in db.Appointments
select new {
id = a.id,
start = a.startTime.Value,
end = a.endTime.Value,
title = a.subjectLine == null ? "" : a.subjectLine
}).ToList();
虽然有很多方法可以将数据集序列化为 JSON,但我发现最简洁的方法是使用 NewtonSoft Json.NET图书馆。这就像添加一行来创建 JSON 对象一样简单,并具有必要的 ISO8601 日期格式:
return JsonConvert.SerializeObject(apps, new IsoDateTimeConverter());
就 jQuery 方面而言,我只会显示“data:”函数,因为这是让我困惑最长的部分:
data: function(start, end, callback) {
$.ajax({
url: "/content/handlers/GetScheduledAppointments.ashx",
type: "GET",
success: function(json) {
callback(json);
},
async: false
});
}
关于日期的一个方便的技巧,这是我在开始使用 Json.NET 库之前遇到的 - 如果你根本无法让 .NET 以 jWC 喜欢的格式返回日期,那么使用 [Date.js 库来执行jQuery 本身的附加格式。几天来,无论我尝试什么,我都无法让后端以可在日历上呈现的格式输出开始和结束时间。在所有功能示例中(在 jQuery 中生成本地数据),日期都是使用以下格式创建的:
new Date(year, month, day, hour, minute)
因此,使用此基础,还可以显式转换从后端返回的日期,因为 Date.js 库将采用几乎所有接近日期的内容并发挥其魔力:
data: function(start, end, callback) {
$.ajax({
url: "/content/handlers/GetScheduledAppointments.ashx",
type: "GET",
success: function(json) {
if ($.isArray(json)) {
$.each(json, function(key, value) {
value.start = new Date(value.start);
value.end = new Date(value.end);
});
}
callback(json);
},
async: false
});
}
我知道这些都不是很方便(甚至没有经过优化),但希望这对那些在 jWC 和 .NET 方面遇到真正困难的人有用。
关于jquery - 在 C# .NET 3.5 中使用 HTTPHandler 和 jQuery 周日历,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3750280/