2012-06-29 30 views
0

我已经在我的页面下,准备:抽到JSON数据,但没有出现在车把模板

<div id="result"></div> 
<script id="some-template" type="text/x-handlebars-template"> 
    <table> 
    <thead> 
     <th>Name</th> 
    </thead> 
    <tbody> 
     {{#athletes}} 
     <tr> 
      <td>{{firstName}} {{lastName}}</td> 
     </tr> 
     {{/athletes}} 
    </tbody> 
    </table> 
</script> 

和下文的JavaScript射击:

var source = $("#some-template").html(); 
var template = Handlebars.compile(source); 

var data = $.getJSON("http://api.espn.com/v1/sports/baseball/mlb/athletes?apikey=axfy7dvwqzktu28srdjna8ta", function() { 
    alert('Load was performed.');   
}); 

$("#result").html(template(data)); 

我得到一个警告,负载已执行,我可以看到Firebug中的所有数据,但#result div不显示数据。

如果我更换连胜文VAR数据如下完全正确的所有功能:

var data = { athletes: [ 
    {firstName: "Josh", lastName: "Hamilton"}, 
    {firstName: "Yu", lastName: "Darvish"}, 
    {firstName: "Ian", lastName: "Kinsler"} 
    ] } 

的“运动员”关键是一对夫妇层的JSON树上下来(体育 - >联盟 - >运动员) 。我不了解如何从API结果中提取这些数据?

回答

0

尝试这样:

$.getJSON("http://api.espn.com/v1/sports/baseball/mlb/athletes?apikey=axfy7dvwqzktu28srdjna8ta", function(data) { 
     alert('Load was performed.'); 
     $("#result").html(template(data.sports[0].leagues[0].athletes));   
}); 

此外,一个重要的旁注:您粘贴您的apikey。我想你想保持私密性。

+0

我在Firebug CONSOLSE中得到“data.sports is undefined”错误 – brianrhea

+0

你能在哪里解决这个问题。我自己正在尝试获取外部json数据来呈现我的把手模板。谢谢 – noobcode

+0

应该是$(“#result”)。html(template(data.sports [0] .leagues [0]));没有.athletes部分 –

1

您正在使用$ .getJSON错误。它不返回数据,而是调用成功函数(我相信你正在提醒),并将数据传递给它。将您的html人口移入成功回调。

它这样做是因为Ajax请求默认情况下,在本质上是异步

+0

啊,是的,我明白你的意思了。因为$(“#result”)。html(template(data));将在数据加载之前运行。 但是,我试过,但它仍然无法正常工作。 – brianrhea

0

如果由于某些原因,您无法将$.get()更改为$.getJSON(),那么您必须在成功回调中使用JSON.parse(theData),否则该模板将无法呈现数据。 (现在很明显,但当我遇到这种情况时,我花了一些时间。)