2011-02-25 85 views
0

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排序?

+0

什麼是你的問題,它的ID訪問一個元素? – Cfreak 2011-02-25 15:07:45

回答

2

JavaScript對象未訂購。儘管大多數瀏覽器保持最初的順序,例如Chrome沒有。

如果您想要排序的數據,請使用數組 - 如果您需要使用不適合數組的鍵(非數字鍵或實際元素鍵之間大量未使用的鍵)訪問,請創建一個包含key = >數組索引映射。

所以,你的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']]

+0

所以我的返回是一個對象,而不是一個數組? – Norbert 2011-02-25 17:00:20

+0

是的,只要命名鍵/花括號,就有對象。數組是列表索引從0..n-1 – ThiefMaster 2011-02-25 23:43:02