1

我使用jQuery Week Calender、 Asp.net Web API 作为服务器端和 Sql 服务器作为后端。

到目前为止我根据演示所做的所有工作,但演示具有静态 JSON 数据,这里我需要从服务器检索数据。

几乎所有其他事情都清楚并且工作正常,但是从服务器加载事件数据并传递到日历存在问题,这是我从服务器得到的响应。

[{"id":13,"title":"Event Name","body":"Content","start":"2012-10-16T03:30:00.00","end":"2012-10-16T06:30:00.00","typeEvnt":1},{"id":14,"title":"dfgfdg","body":"gdfgdfg","start":"2012-10-15T04:15:00.00","end":"2012-10-15T06:45:00.00","typeEvnt":1}]

日期时间为 GMT 格式,需要转换为当地时区,然后添加到日历中。

这是我将其添加到日历中的操作:

$.ajax({
                url: '/api/api/event/load',
                type: 'get',
                statusCode: {
                    200: function (data) {
                        var dataString = JSON.stringify( data);   

                        callback( {events : dataString} );
});

但是我在 chrome 中遇到了一个错误,说Uncaught TypeError: Cannot call method 'getTime' of undefined我很确定这与日期转换有关。

在此错误之后,日历不会加载事件。

这里有几点,不是很清楚:

  1. 服务器应将数据发送到浏览器的日期时间格式。
  2. 如何将其转换为本地时区并传递给日历。
  3. C#.net 中的服务器端代码用于以所需格式格式化日期时间。

总之,我需要从服务器检索 DateTime 数据并将其转换为本地时区,然后将其添加到 jQuery Week Calender 的方法。

任何建议或线索都会有所帮助或 MVC 演示。

4

1 回答 1

1

首先,您在$.ajax上面的调用中缺少一些右括号。

另请注意,使用success:设置而不是statusCode: { 200:...等更常见。

查看 JQuery Week Calendar 站点上的演示,它需要 JavaScript Date 对象用于每个事件的开始和结束字段。JSON 不会自动将这些字段转换为日期,因此您需要所谓的 reviver 函数来执行此操作。您还希望文本以text格式返回,以便您可以使用 JSON 解析而不是 JQuery 的 JSON 解析器对其进行解析。

下面的dateReviver函数以 ISO 8601 日期格式解析日期,我相信这是您正在寻找的。取自:礼貌:如何使用 Windows 8 JSON.parse 将 JSON 文本反序列化为日期类型?

function dateReviver(value) {
  if (typeof value === 'string') {
    var re = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)$/
    var result = re.exec(value);
    if (result) {
        return new Date(Date.UTC(+result[1], +result[2] - 1, +result[3], +result[4],+result[5], +result[6]));
    }
  }
  return value;
}

ajax 函数调用 JSON 解析,后者又使用 dateReviver 函数转换其中的任何日期字符串。

$.ajax({
  url: '/api/api/event/load',
  type: 'get',
  dataType: text,
  success: function(data) {
      var eventArray = JSON.parse(data, dateReviver);
      callback({events: eventArray});
  }
});
于 2012-10-15T22:31:56.880 回答