【问题标题】:jQuery $.get() Order Doesn't MatchjQuery $.get() 顺序不匹配
【发布时间】:2011-02-25 15:06:21
【问题描述】:

php 返回按名称排序的数组,但是当我使用 $.(get) 时,它们是按 id 排序的。

{
"34":{"id":"34","name":"Amber","assigned":1},
"72":{"id":"72","name":"Bob","assigned":0},
"7":{"id":"7","name":"Charlie","assigned":0},
"3":{"id":"3","name":"Gary","assigned":1}
}

$.get("/assign", { clasa: clasaDL.attr('id') },
  function(data){
    var checked, boxes = "";
    $.each(data, function(n, val) {
      checked = (val.assigned == 1) ? 'checked="yes"' : '';
      boxes += '<input type="checkbox" ' + checked + ' value="' + val.id + '" />' + val.name;
    });

  $('#dialog').html('<form id="assign">' + boxes + '</form>');
}, "json");

问题是:如何按名称而不是 id 订购?

【问题讨论】:

    标签: php jquery arrays get


    【解决方案1】:

    JavaScript 对象没有顺序。虽然大多数浏览器保持初始顺序,例如Chrome 没有。

    如果您想要排序数据,请使用数组 - 如果您需要使用不适合数组的键(非数字或实际元素键之间有很多未使用的键)进行访问,请创建一个包含键的对象 =>数组索引映射。

    所以您的 JSON 可能如下所示:

    {
        "data": [
            {"id":"34","name":"Amber","assigned":1},
            {"id":"72","name":"Bob","assigned":0},
            {"id":"7","name":"Charlie","assigned":0},
            {"id":"3","name":"Gary","assigned":1}
        ],
        "mappings": {"34": 0, "72": 1, "7": 2, "3": 3}
    }
    

    然后您可以遍历 data 或使用 data[mappings['yourid']] 通过其 id 访问元素

    【讨论】:

    • 所以我的返回是一个对象,而不是一个数组?
    • 是的,一旦你命名了键/花括号,你就有了对象。数组是索引为 0..n-1 的列表
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-30
    • 2018-12-08
    • 2019-06-21
    • 2014-11-17
    相关资源
    最近更新 更多