簡體   English   中英

這兩種返回JSON對象的方式有什么區別?

[英]What is the difference between these two ways of returning a JSON object?

我正在使用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 is undefined”,是否有任何原因導致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時,它被認為是一個字符串並進入如果。

反正有沒有得到這個公認的功能? 我嘗試將返回值括在大括號中,將dataType更改為script,並使用eval()將結果轉換為函數,但這些似乎都不起作用。

您是否也嘗試過將事件包含在引號中?

'事件':[....

將您的響應文本放入JSON驗證器中 ,看看問題出在哪里。

還要注意,將new Date(2010, 2, 28, 10)直接輸出到文本中被認為是不好的做法,而是使用實際值,然后使用JS在客戶端解析它們。 (我相信這是最明顯的錯誤,只要您不使用eval來解析JSON字符串即可:))

從jQuery 1.4.0開始,該庫對JSON的格式非常嚴格 (您的JSON文本缺少鍵的引號)

在搜索完Google之后,我遇到了jQuery Week Calendar Google Group該討論與我遇到的問題完全相同。

我認為主要問題是DateTimes格式不正確。 返回事件JSON對象可以直接正確地轉換日期,但是我的ajax調用返回的是new Date(2010, 02, 23, 12)作為時間。 它導致它無聲地失敗。 將日期時間更改為類似2010-02-23T12:15:00.000+10:00似乎已經解決了。

但是,該用戶確實對events : [不正確events : [破壞了JSON。 我把它留在了ajax調用中,它仍然可以正常工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM