JQuery $.each仅返回JSON的第一项

3

我有一个类似下面的JSON对象:

{
    "mesta": [
        {
            "latlng": [49.094046,15.893415],
            "nazev": "Město Jaroměřice nad Rokytnou"
        },
        {
            "latlng": [49.44119,18.09461],
            "nazev": "Obec Vidče"
        },
        {
            "latlng": [49.5047,17.10139],
            "nazev": "Obec Smržice"
        }
    ],
    "orp": [
        {
            "latlng": [49.2156,15.87819],
            "nazev": "Město Třebíč (ORP)"
        },
        {
            "latlng": [49.457623,18.142622],
            "nazev": "Město Rožnov pod Radhoštěm (ORP)"
        }
    ]
}

我尝试遍历这个对象,但只弹出了第一项(mesta)。根据jsonlint的检测,语法是正确的。我漏掉了什么吗?

function loadMarkers() {
    $.getJSON('data.json', function(data) {

        $.each(data,function(index,obj) {
                alert(index);
        });
    });
}

2
适用于我:http://jsbin.com/usakic - T.J. Crowder
1
对我来说可以运行:http://jsfiddle.net/bFFyL/。请仔细检查返回的对象。 - jgauffin
@zimmi - 如果我在Chrome控制台上运行$.getJSON('data.json', function(data) { console.log(data); });,页面的响应只包含一个属性,即mesta - James Allardice
现在我明白了。嗯,我该怎么办呢?这可能是服务器端的问题吗? - Michal Zimmermann
您的data.json仅包含mesta http://www.zimmi.cz/edpp/data.json。 - Andreas Wong
显示剩余3条评论
4个回答

0
问题在于服务器的响应,而不是你的 JavaScript。我在控制台上运行了以下代码:
$.getJSON('data.json', function(data) { 
    console.log(data); 
});

结果看起来像这样:

enter image description here

如您所见,返回的对象中只有一个属性(mesta, 一个包含三个元素的数组)。

您可以通过直接访问data.json文件来确认这一点。


0

您正在选择具有对象数组的每个对象。

解决方案可能是将每个对象放入其中,或者不使用jQuery.each,而是像这样简单地使用for...(假设返回的对象称为data)

for(obj in data){
    for(entry in data[obj]){
    {
       console.log(entry)
       ....
    }
}

0

0

问题不在于您的JSON对象或$.each函数,我能够在上面的数据中迭代两个键http://jsfiddle.net/d4udts/N2C3j/

问题似乎出现在您的getJSON调用中,我怀疑您的调用仅返回第一个元素。您是否调试过代码并查看了调用的获取JSON数据?


我运行了你的网站并且在响应中得到了两个键,你的迭代器也将两个键都打印在控制台上,对我来说看起来很正常,请使用Firebug进行检查。 - Deepu
我猜你的问题可能是与Chrome浏览器有关,因为你的代码在Firefox中运行良好,并返回了两个键mesta和orp。 - Deepu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接