2012-03-09 71 views
0
{"0": 
    {"id":"276","course":"92","name":"Tutorial - Compound Measures", 
    "activitylink":"2490","available":"1331231400","deadline":"1331235000"}, 
"1": 
    "[email protected]","reference":"[email protected]"} 

我想在jQuery/Javascript中訪問這個,但我無法。這是我的jQuery:如何在Javascript中訪問這個JSON數據?

$('#lessonSelect').live('change', function() 
{ 
    $.getJSON('?ajax=true&lid='+$('#lessonSelect').val(), function(data) 
    {  
     var len = data.length;  
     var lessonDialog = "";//initialise 
     var launchLessonDiv = '<a href="' + data.reference + '">Launch Lesson</a>'; 

     for (var i = 0; i< len; i++) 
     { 
      lessonDialog += '<p>' + data[i].name + '</p>'; //get lesson name 
     } 

     $('#lessonDialog').html(lessonDialog); //insert lesson name into dialog 
     $('#launchLessonDiv').html(launchLessonDiv); 

    }); 
}); 

這基本上是一個選擇列表。用戶每次選擇內容時,頁面上的鏈接和其他內容都會發生變化。這些東西在第一次加載頁面的時候就起作用了,但是當我開始在選擇列表中選擇東西的時候,lessonDialog就會空白,裏面沒有任何東西。

+0

可以改變JSON源格式? ...如果這樣會簡化問題...#1和#2之間的結構不一致 – charlietfl 2012-03-09 17:30:24

+0

你是什麼意思,我會怎麼做呢? JSON不太好。事實上,昨天是我第一次使用JSON! – user1219572 2012-03-09 17:33:53

+0

如果以純數組形式出現,那麼它將會變得更加清晰:'[{「name」:「foo」},{「name」:「bar」}]'..post code您正在使用 – charlietfl 2012-03-09 17:41:10

回答

2

轉換與數字鍵的對象,以一個真正的數組:

$.getJSON('?ajax=true&lid='+$('#lessonSelect').val(), function(data) { 
    data = Array.prototype.slice.call(data); 

您當前的方法失敗,因爲{ ... }的結果是創建一個對象,數組。對象的length屬性爲undefined,所以循環就永遠也不會開始:

for (var i=0; i<undefined; i++) ; // <-- 0 < undefined is always false 
+0

創建它。在那之後我將如何訪問它? – user1219572 2012-03-09 17:24:40

+0

@ user1219572就像一樣。將對象轉換爲數組後,'data'是一個真正的數組,並且可以使用數組屬性和方法。 – 2012-03-09 17:27:54

+0

我試過警報(數據)後數據= Array.prototype.slice.call(數據),但它什麼都沒有警告:/ – user1219572 2012-03-09 17:30:09