jQuery $ .get()命令不匹配

时间:2011-02-25 15:06:21

标签: php jquery arrays get

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订购?

1 个答案:

答案 0 :(得分:2)

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

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

所以你的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访问元素

相关问题