2010-02-22 434 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

相關問題