2012-07-13 77 views
0

我的问题是一个JavaScript问题,我尝试解析JQuery文件的JQuery的$ .getJson函数,当我把它们每个在一个变量,我指出,它需要更多的对象,我认为,这里的代码JS:jquery问题与getJSON

$.getJSON(
url, 
function(data) { 
    var content = '<h1>Applications</h1>'; 
    content += '<ul>'; 
     for (var pos in data){ 
      var app = data[pos]; 
      content += '<li>'+app.name+'</li>'; 
     } 
    content += '</ul>'; 
    $('div.apps').html(content); 
} 

这里的JSON文件:

[ 
{ 
    "name": "apidocs", 
    "staging": { 
     "model": "rack", 
     "stack": "ruby18" 
} 
, 
{ 
    "name": "apidocs2", 
    "staging": { 
     "model": "rack", 
     "stack": "php53" 
} 
, 
{ 
    "name": "apidocs3", 
    "staging": { 
     "model": "rack", 
     "stack": "java17" 
} 
] 

那么,在我的html页面我有整体性6个对象而不是3的最后3个是为“未定义”但我只想那些在json文件中的,因为Firefox不接受未定义的标签。

+1

JSON无效。缺少''''暂存''。 – Florent 2012-07-13 09:29:46

+0

如果不是因为无效的JSON,我猜测它可能与'for(var pos in data)'行有关。数据的原型可能也在迭代中呢? – phenomnomnominal 2012-07-13 09:31:53

+0

尝试将其记录到控制台..它总是有助于'在console.log(数据)'在铬的内置开发工具或设置断点和调试..你会发现你的问题在一瞬间!就像在答案中提到的一样..避免使用for..in ..对于数组,例如它会添加长度参数..通常不是你要去的地方 – VDP 2012-07-13 09:35:41

回答

0
 for (var i = 0; i < data.length; i++) { 
      var app = data[ i ]; 
      content += '<li>'+app.name+'</li>'; 
     } 
0

AVOIDfor..in循环。

for (var pos in data){ 

与通常的更换:

for (var i=0; i<data.length; i++){ //use as data[i] 

如果使用for..in循环,所以在使用它之前使用data.hasOwnProperty(..)。否则,你肯定会得到比你期望的更多的对象。它们实际上是data继承的其他属性。

+0

确定它是这样工作的,再次感谢,我会谨慎的为不用担心。 – yusulu 2012-07-13 09:57:05

0

更正JSON,你有太多的开标签。

Corrected JSON>>

Additionaly,纠正for循环。使用var count = 0; count < data.length; count++

0

由于您使用的是jQuery,请使用其完美的$.each函数。

$.each(data, function(d) { 
    content += '<li>' + d.name + '</li>'; 
});