2010-10-28 121 views
0

大家好,我正在嘗試閱讀一些json並做兩件事情。 將一些json數據插入到UL中。第二件事是創建一個函數,可以從錨標籤調用並顯示其他數據。讓我試着解釋我的代碼。從jquery閱讀json

的json看起來像這樣

[{lakeName:"Lake 1",lakeCode:"111",Readings[["24-Oct-10",12.5],["24-Oct-10",10.5],["24-Oct-10",15.5],]}{lakeName:"Lake 2",lakeCode:"222",Readings[["24-Oct-10",12.5],["24-Oct-10",10.5],["24-Oct-10",15.5],]}] 

我試圖填充這樣

$(document).ready(function() { 
     $.ajax({ 
      url: "http://theaboveJSONisreturnedFromMyUrl", 
      method: 'GET', 
      dataType: 'json', 
      success: onDataReceived 
     }); 



     var data = []; 

     function onDataReceived(series) { 

      data = [series]; 
      $(data).each(function (i, data) { 
       $('#myList').append("<li>" + "<a href=\"javascript:GetLake(" + data.lakeCode + ");\">" + data.lakeName + "</a></li>"); 
      }); 

     } 
    }); 

      function GetLake(lake) { 

      alert('some how get the readings for the clicked lake code e.g. lakeCode 111 and display them here ["24-Oct-10",12.5],["24-Oct-10",10.5],["24-Oct-10",15.5]); 

      } 

現在我看到的數據值,我的名單,但是我不能似乎通過例如訪問data.lakeCode

我做錯了什麼?

任何幫助將是偉大的!

+0

乍一看,我猜你在你的JSON中有語法錯誤。我認爲在'Readings'之後缺少':'。這可能是也可能不是全部問題。 – Thomas 2010-10-28 09:46:02

+0

另外'data = [series];'使'series'成爲數組'data'中唯一的項。然後您嘗試使用'$ .each'遍歷數組。這與直接使用'series'完全相同。 – lonesomeday 2010-10-28 09:51:34

回答

0

在您的JSON中有幾個語法錯誤。它應該是這樣的:

[{lakeName:"Lake 1",lakeCode:"111",Readings:[["24-Oct-10",12.5],["24-Oct-10",10.5],["24-Oct-10",15.5]]},{lakeName:"Lake 2",lakeCode:"222",Readings:[["24-Oct-10",12.5],["24-Oct-10",10.5],["24-Oct-10",15.5]]}] 

一些:,人失蹤,在之間產生不必要的,和不必要的]是在年底。

+0

很酷。 Iwill致力於對json語法進行排序。希望這會有所幫助。 我拿走了data = [series]然而series.lakeCode仍然是未定義的。 – 2010-10-28 10:10:11

0

爲了有效,你的JSON需要進行以下更改(you can check always validity with JSONLint here):在對象之間

  • 逗號主陣列
  • Readings陣列中沒有尾隨命令
  • 成員名稱雙引號
  • 並將其值

在所有之間

  • :它應該是這樣的:

    [{"lakeName":"Lake 1","lakeCode":"111","Readings":[["24-Oct-10",12.5],["24-Oct-10",10.5],["24-Oct-10",15.5] ]},{"lakeName":"Lake 2","lakeCode":"222","Readings":[["24-Oct-10",12.5],["24-Oct-10",10.5],["24-Oct-10",15.5] ]}] 
    //compared to your current version: 
    [{ lakeName :"Lake 1", lakeCode :"111", Readings [["24-Oct-10",12.5],["24-Oct-10",10.5],["24-Oct-10",15.5],]} { lakeName :"Lake 2", lakeCode :"222", Readings [["24-Oct-10",12.5],["24-Oct-10",10.5],["24-Oct-10",15.5],]}] 
    

    此外,你應該在這裏使用$.each()代替,就像這樣:

    $.each(data, function() { 
        $('#myList').append("<li>" + "<a href=\"javascript:GetLake(" + this.lakeCode + ");\">" + this.lakeName + "</a></li>"); 
    }); 
    

    還是一個比較好,使用像這樣的DOM方法:

    $.each(data, function() { 
        $('<a />', { href: '#', click: function() { GetLake(this.lakeCode); } }) 
        .wrap('<li />').parent().appendTo('#myList'); 
    }); 
    
  • +0

    好的,我已經驗證了我的json並且看起來不錯。然而,this.lakeCode仍然是未定義的。我還有什麼錯過了? – 2010-10-28 11:20:20

    +0

    @ user293545 - 我的錯,沒有看到你的'data = [series];',只是直接使用'series'。 – 2010-10-28 11:21:29

    +0

    很感謝尼克。javascript對我來說是一個弱點:(確定在我的函數GetLake中如何獲得Readings對象並輸出它們的最佳方式?我應該在某個地方使用變量嗎? – 2010-10-28 18:43:31