jQuery getJSON数据顺序因浏览器而异

时间:2011-09-13 22:02:23

标签: jquery getjson

JSON数据:

  {"2":"Alpha","1":"Beta"}

数据格式是固定的,即我无法更改它,我只能修改javascript / jQuery代码。

    $.getJSON("www.myurl.com", function(data) {
        var items = [];
        $.each(data, function(key, val) {
            items.push(key + ', ' + val);
        });
        alert(items);
    });

Chrome,IE9和Opera显示:   1,Beta,2,Alpha

Firefox和Safari显示:   2,Alpha,1,Beta

问题1:哪个是正确的?

问题2:我想要在Firefox和Safari中订购数据。对我来说最简单的方法是确保Chrome,IE9和Opera产生与Firefox和Safari相同的输出?

3 个答案:

答案 0 :(得分:2)

$.each在javascript数组上运行(索引是基于0的整数)。您显示的JSON不是数组。它是一个关联数组,这是javascript对象。所以:

$.getJSON("www.myurl.com", function(data) {
    var items = [];
    for (var prop in data) {
        if (data.hasOwnProperty(prop)) {
            items.push(prop + ', ' + data[prop]);
        }
    }
    alert(items);
});

或者,如果您想使用$.each,请使用数组,如下所示:

["Alpha", "Beta"]

然后:

$.getJSON("www.myurl.com", function(data) {
    var items = [];
    $.each(data, function(index, element))
        items.push(index + ', ' + element);
    }
    alert(items);
});

答案 1 :(得分:1)

不知道......但你可以在事后对数组进行排序。

给出以下输出(模拟测试)

var items = ["1, Beta", "2, Alpha"]

你可以

items.sort(function(a,b){ return b.split(",")[0] - a.split(",")[0] })

答案 2 :(得分:0)

我会将您的回复重新排列为更像这样的内容:

[
  {
    "key":"2",
    "value":"Alpha"
  },
  {
    "key":"1",
    "value":"Beta"
  }
]

使用数组将确保保留订单。