2013-08-21 27 views
0

基本上我正在將JSON結果轉換爲html,並使用$ .each它遍歷多個鍵。例如,我拉回了Facebook的帖子,並在該帖子中反覆討論。

問題出在這樣一個事實,即當有多個「喜歡」時,一切都很好用!雖然當只有1個「喜歡」的時候,「源」鍵會從結果集中刪除,而我的JavaScript會因爲我期望它在那裏而中斷。任何想法爲什麼$ .each跳過單個節點的級別?以下是我的代碼:

* ** JQUERY

  $.each(post.likes.item, function(i, like){ 
      $(currentpost).find('div.cc_likes').append(like + ','); 
      console.log(like) 
      });    

* JSON結果**

*單像

 likes": { 
      "item": { 
       "source": { 
        "cta": "Mary Smith", 
        "url": "http:\/\/www.facebook.com\/", 
        "photo": { 
         "image": "https:\/\/graph.facebook.com\/" 
        } 
       } 
      }, 

結果在控制檯:

Object 
     cta: "MaryAnn Smith" 
     photo: Object 
     url: "http://www.facebook.com/" 

*多喜歡在控制檯

 "likes": { 
      "item": [ 
       { 
        "source": { 
         "cta": "Bobby Carnes Sr.", 
         "url": "http:\/\/www.facebook.com", 
         "photo": { 
          "image": "https:\/\/graph.facebook.com\" 
         } 
        } 
       }, 
       { 
        "source": { 
         "cta": "Jenna Purdy", 
         "url": "http:\/\/www.facebook.com\", 
         "photo": { 
          "image": "https:\/\/graph.facebook.com\" 
         } 
        } 
       }, 
       { 
        "source": { 
         "cta": "Kevin Say", 
         "url": "http:\/\/www.facebook.com\", 
         "photo": { 
          "image": "https:\/\/graph.facebook.com\" 
         } 
        } 
       } 
      ], 
      "count": "10", 
      "count_display": "10" 
     }, 

結果:

Object 
     source: Object 
     cta: "Kevin Smith" 
     photo: Object 
     url: "http://www.facebook.com/" 
+3

您應該將您的JSON更改爲始終使用數組。這使得一切都更簡單。 – SLaks

+0

你應該像單獨處理單一的情況 –

+0

除非你被它當作單個對象時被卡住,在這種情況下,你需要測試它是否有一個長度屬性,然後將它傳遞給$ .each –

回答

1

由於$.each()需要的陣列或陣列狀物體作爲參數,使用對象post.likes.item檢查,如果它是一個前非數組。 下面的代碼將數組總是傳遞給jQuery的 -

 $.each([].concat(post.likes.item), function(i, like){ 
     $(currentpost).find('div.cc_likes').append(like + ','); 
     console.log(like) 
     }); 

說明

[]是JavaScript的一個空數組。 JavaScript中的每個數組都有一個concat方法。對於空數組,返回數組。

  • 如果obj不是數組,則結果爲[obj]這是一個包含一個項目的數組。
  • 如果obj是一個數組,則結果是obj的深層副本,它已經是一個數組。

More about concat method

+0

那麼[]做什麼呢?這很好!我只是想弄明白爲什麼。而我在這裏的「concat」的背景。 – DigitalMC

1
 if (isArray) { 
     for (; i < length; i++) { 
       value = callback.call(obj[ i ], i, obj[ i ]); 

       if (value === false) { 
        break; 
       } 
      } 
     } else { 
      for (i in obj) { 
       value = callback.call(obj[ i ], i, obj[ i ]); 

       if (value === false) { 
        break; 
       } 
      } 
     } 

這是jQuery代碼被你的JSON返回運行。發生的事情是,當您查看多個結果時,它正在循環數組,返回每個基本級別的對象。但是,當您在單次返回時運行它時,它會遍歷對象屬性(在本例中爲「source」),並返回該屬性的值。

這裏有兩種選擇。你可以確保單個項目仍然放在一個數組中,或者你可以檢查客戶端的單個項目。Moazzam Khan建議的方式是在大多數情況下最好的方法。