2010-10-28 123 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