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

发布于 2024-12-04 19:39:48 字数 563 浏览 1 评论 0原文

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 相同的输出的最简单方法是什么?

JSON data:

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

The data format is fixed, i.e. I can't change it, I can only amend the javascript/jQuery code.

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

Chrome, IE9, and Opera display:
1, Beta,2, Alpha

Firefox and Safari display:
2, Alpha,1, Beta

Question 1: Which is correct?

Question 2: I want the data ordered as in Firefox and Safari. What's the easiest way for me to ensure Chrome, IE9, and Opera produce the same output as Firefox and Safari?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

反话 2024-12-11 19:39:48

$.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);
});

$.each operates on javascript arrays (indexes are 0 based integers). The JSON you have shown is not an array. It's an associative array which is what javascript objects are. So:

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

Or if you want to use $.each then use arrays, like this:

["Alpha", "Beta"]

and then:

$.getJSON("www.myurl.com", function(data) {
    var items = [];
    $.each(data, function(index, element))
        items.push(index + ', ' + element);
    }
    alert(items);
});
思慕 2024-12-11 19:39:48

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

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

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

您可以

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

no idea... but you can sort the array after the fact.

given the following output (simulated for testing)

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

you can

items.sort(function(a,b){ return b.split(",")[0] - a.split(",")[0] })
不知所踪 2024-12-11 19:39:48

我会将您的响应重新安排为更像这样的内容:

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

使用数组将确保保留顺序。

i would rearrange your response to something more like this:

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

using an array will ensure that the order is preserved.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文