2011-10-03 75 views
0

好吧我认为我有一个不好的时刻。通常我可以迭代JSON而没有问题。jquery each和一个JSON字符串

下面是一个简单的字符串

{ 
    "service 1": { 
     "admin": {}, 
     "list": [ 
      "1" 
     ], 
     "info": [ 
      { 
       "id": "1", 
       "details": "Failed", 
       "curr-status": "Warning", 
       "curr-status-class": "warning" 
      } 
     ], 
     "status": [ 
      {} 
     ] 
    }, 
    "service 2": { 
     "admin": {}, 
     "list": [ 
      "1" 
     ], 
     "info": [ 
      { 
       "id": "1", 
       "details": "Failed", 
       "curr-status": "Warning", 
       "curr-status-class": "warning" 
      } 
     ], 
     "status": [ 
      {} 
     ] 
    } 
} 

我所试图做的是能够在每个服务做一个$。每(),然后做一个漂亮的列表出来,并最终排序依据等等。

我最后在通过它迭代失败的尝试是:

$('.refreshAllb').click(function() 
{ 
    $.post('services.json', {"x":"blank"}, function(data) 
    { 
     $('body').html(''); 
     $.each(data, function(i) 
     { 
      $.each(data[i], function(x, z) 
      { 
       $('body').append(x.z+"<br>"); 
      }); 
     }); 
    }, "json"); 

}); 

我已经环绕在每个运行的各种概念()与各()来是一个孤独的每一个。我一直返回的是对象对象或未定义的对象。所以我知道我在场上,但我没有击中头部......想法?

+0

'x.z'!='x [z]' – Eric

+0

现在我仍然几乎没有返回。我得到“o,undefined,undefined,undefined”。我想要做的就是打印“服务1”,“服务2”,我很高兴在这一点上。 – chris

回答

4
$('.refreshAllb').click(function() { 
    $.post('services.json', {"x":"blank"}, function(data) { 
     $('body').empty(); 
     $.each(data, function(serviceName) { 
      $.each(this, function(key) { 
       $('body').append(serviceName + "." + key + "=" + this + "<br/>"); 
      }); 
     }); 
    }, "json"); 
}); 
+0

好,好吧。现在我正在某处。是否有一个特定的原因,为什么我最初的方法不工作?我通常会按照我原来的帖子以类似的方式处理它,但是这个让我跳动。很高兴能够更好地了解我在做什么的失败方面。 – chris

+1

@chris:您需要提醒自己[jQuery.each](http://api.jquery.com/jQuery.each/)的行为。传递给回调函数的第一个参数是_key_,第二个参数是值,而不是相反。请注意,'this'与第二个参数相同,因此在大多数情况下您不需要第二个参数。 – Eric