2010-02-22 206 views
2

我玩弄了jQuery Week Calendar,我试图得到这个工作,但我想不通这是为什么抛出一个错误。这两种返回JSON对象的方式有什么区别?

日历有一个返回事件与填充本身的列表的方法。

的方法(使用预先设定的事件用于演示目的)是这样的:

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到达另一个网页,将返回真正的日期列表。为了测试,我保留了相同的测试数据,以查看帖子是否正确完成。

的方法调用的页面,它会在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()将结果作为函数进行投射,但似乎没有任何效果。

回答

0

经过谷歌搜索后,我遇到了jQuery Week Calendar Google Groupthis discussion有我完全相同的问题。

我认为主要的问题是DateTime是否的格式不正确。返回事件JSON对象直接正确地转换日期,但我的ajax调用返回new Date(2010, 02, 23, 12)作为时间。它使它失败了。将日期时间更改为像2010-02-23T12:15:00.000+10:00似乎已修复它。

但是,该用户看起来是不正确的关于打破JSON的events : [。我把它留在我的ajax调用中,它仍然正常工作。

0

您是否尝试过在引号引起的事件呢?

'事件':[....

+0

害怕没有工作,它似乎使它失败默默。 – Brandon 2010-02-22 22:26:16

0

把你的回应文本JSON validator看看,问题出在哪里。

还要注意,直接输出new Date(2010, 2, 28, 10)成文本被认为是不好的做法,而是用真实的值,然后分析它们与JS客户端。 (我相信这是最明显的错误,只要你不使用eval解析您的JSON字符串:))

以来的jQuery 1.4.0,该库是非常严格的,对JSON如何被格式化(你的json文本未命中键引用)

+0

布兰登在另一评论中指出,他正在使用1.3.2。此外,原始版本使用'new Date(...)'作为值。好的做法与否,问题仍然是为什么停止工作。 – user113716 2010-02-22 23:29:00

相关问题