2010-04-28 41 views
1

我有一個看起來像這樣的JSON對象。jQuery JSON。每個錯誤

[ 
    { 
     "id" : "23", 
     "event_id" : "0", 
     "sport_title" : null, 
     "event_title" : null, 
     "title" : "Under 1 day!", 
     "content" : "It\\'s all hotting up and battle commences in under one day!", 
     "link" : "" 
    }, 

    { 
     "id" : "20", 
     "event_id" : "0", 
     "sport_title" : null, 
     "event_title" : null, 
     "title" : "Getting Exciting", 
     "content" : "Less than two days till it all kicks off, with cricket....", 
     "link" : "" 
    } 
] 

,我試圖瞭解詳細內容出這個JSON對象,並將其前面加上一個<ul>

,我目前正在努力看起來像這樣的代碼,是有問題的

var writeup_list = writeuplist; 

$.getJSON('../json/getWriteups.json', function(data) { 

    $.each(data.items, function(i, item) { 
     writeup_list.html(function() { 
      var output; 
      output = '<li><a href="/writeups/index.php#writeup_' + item.id + '">'; 
      if(item.sport_title != null) { 
       output += item.sport_title + ' - '; 
      } 
      output += item.title + '</a></li>'; 

      return output; 
     }); 
    }); 

}); 

writeuplist只是ul對象。

我也擔心重寫已經在列表中的信息或只是再次添加。不想繼續添加相同的數據。避免這種情況的好方法是什麼?

我似乎在從JSON文件中獲取數據時遇到問題我相信這與我試圖在.each函數中訪問它的方式有關。

任何人都可以發現哪裏會出錯嗎?

回答

3
jQuery.getJSON('../json/getWriteups.json', function(data) { 
    var output = ''; 

    jQuery.each(data.items, function (index, item) { 
     output += '<li><a href="/writeups/index.php#writeup_' + item.id + '">'; 

     if (typeof item.sport_title == "string") { 
     output += item.sport_title + ' - '; 
     } 

     output += item.title + '</a></li>'; 
    }); 

    writeup_list.html(output); 
}); 

需要注意以下幾點:

  1. 確定data.items是訪問您的陣列的正確方法? (嘗試在回調中做alert(data.items),並確保你看到[object Array])。
  2. 您確定item.sport_title將爲空嗎?我改變它來檢查它的一個字符串...
  3. 當你沿着建立一個列表元素的字符串,然後將它添加到DOM的最後,比將元素添加到DOM更快你走。
  4. element.html(str)將取代當前內容。您的示例在每次迭代中都會替換當前的html,所以最後只有列表中最後一個列表元素的內容。
+0

正確的data.items,原來只是數據。 現在即將在計時器中測試此代碼,看看它是否添加了相同的東西......我不希望它做什麼! – Aran 2010-04-28 23:42:38

+0

感謝您的幫助讓它工作。 :-) – Aran 2010-04-28 23:48:04

0

我相信你應該使用:

$(data.items).each(function(i, item) { 

但你也可以使用標準的JavaScript環路做同樣的事情:

for (var i = 0; i < data.items.length; i++) { 
    var item = data.items[i]; 

而且,你不希望使用.html()來設置你的lis,因爲這將覆蓋已經存在的html。使用.append()代替:

var output; 
output = '<li><a href="/writeups/index.php#writeup_' + item.id + '">'; 
if(item.sport_title != null) { 
    output += item.sport_title + ' - '; 
} 
output += item.title + '</a></li>'; 

writeup_list.append(output); 
1

首先,而不是data.items,你應該只使用data。在你的情況下,返回的數據是一個數組,所以你想迭代它。

其次,寫代碼的方式,它會一直覆蓋writeup_list的內容。相反,建立html字符串,然後將其設置在最後:

$.getJSON('../json/getWriteups.json', function(data) { 
    var output = '';  
    $.each(data, function(i, item) { 
     output += '<li><a href="/writeups/index.php#writeup_' + item.id + '">'; 
     if(item.sport_title != null) { 
      output += item.sport_title + ' - '; 
     } 
     output += item.title + '</a></li>'; 
    }); 

    writeup_list.html(output); 
});