【问题标题】:jQuery getJSON data order varies across browsersjQuery getJSON 数据顺序因浏览器而异
【发布时间】:2011-09-14 06:49:37
【问题描述】:

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、阿尔法、1、贝塔

问题 1:哪个是正确的?

问题 2:我希望数据在 Firefox 和 Safari 中排序。确保 Chrome、IE9 和 Opera 产生与 Firefox 和 Safari 相同的输出对我来说最简单的方法是什么?

【问题讨论】:

    标签: jquery getjson


    【解决方案1】:

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

    【讨论】:

    • 使用第一个选项(数据中的 var prop)给我的输出与我的原始代码完全相同。
    • 第二个选项不是一个选项,因为我无法更改数据。
    • @Ian,如果您不使用 javascript 数组,则无法确保任何顺序。
    【解决方案2】:

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

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

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

    你可以

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

    【讨论】:

      【解决方案3】:

      我会重新安排你对类似这样的回答:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-10-15
        • 2015-02-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-24
        • 2018-03-30
        • 2016-03-21
        相关资源
        最近更新 更多