2013-07-24 64 views
0

我想弄清楚,爲什麼我的AJAX $每個改變我的名單被印刷的方式嗎?

我有一個JSON字符串是這樣的:

[{"name":"Adam","len":1,"cid":2},{"name":"Bo","len":1,"cid":1},{"name":"Bob","len":1,"cid":3},{"name":"Chris","len":1,"cid":7},{"name":"James","len":1,"cid":5},{"name":"Michael","len":1,"cid":6},{"name":"Nick","len":1,"cid":4},{"name":"OJ","len":1,"cid":8}] 

這裏所有的名字都按字母順序排序,而是讓他們出來的時候,他們被「CID」排序?爲什麼,我該如何改變這一點?

這裏是我的jQuery:

var names = {}; 
$.getJSON('http://mypage.com/json/names.php', function(data){ 

    $.each(data.courses, function (k, vali) { 
     names[vali.cid] = vali.name; 
    }); 
}); 

我想它,因爲 「名字[vali.cid]」,但我需要的那部分,以保持這種方式。它還能完成嗎?

希望能幫助和在此先感謝: - )

回答

1

訂購的對象內部是不是真的定義或可預測的,當你遍歷它。我建議排序基於內部屬性數組:

var names = []; 
$.getJSON('http://mypage.com/json/names.php', function(data){ 
    $.each(data.courses, function (k, vali) { 
     names.push({name: vali.name, cid: vali.cid}); 
    }); 

    names.sort(function(a, b) { 
     return a.name.localeCompare(b.name); 
    }); 
}); 

現在您有一個有序的數組,你可以在可預知的順序遍歷它。

+0

那麼,如何獲得的名稱和CID到名字再次反對呢? – Mansa

+0

它被定義爲不確定的,不未定義(有區別),但仍處於_all_的當今最常用的瀏覽器(這是他可能使用的一個)預測的。儘管如此,我仍然同意不應該依賴訂單,但是再一次瀏覽器供應商不會真正改變這麼多人已經(錯誤地)依賴於我的猜測。 – griffin

+0

@griffin我想我只是偏執狂。 :) –

1
  1. 沒有「ajax $ each」 - 你可能是指jQuery函數。
  2. 隨着「當他們出去」我假設你的意思是像你的$ $每個電話後的console.debug(名稱)
  3. 對象沒有在每個定義的javascript中排序,所以變量沒有更多的順序「名字」。儘管如此,今天大多數JavaScript實現(以及所有可能對你很重要的實現 - 在最常用的瀏覽器中使用的實現)在對象中使用穩定的順序,這通常取決於您插入內容的順序。

這一切都表示,目前大概可以你沒有得到你期待什麼理由3:

  1. 嘗試console.debug(數據),看看你會得到什麼 - 順序爲你想要它?
  2. 因爲你不明確說明你如何調試你的東西,這個問題可能是你的輸出,而不是數據的存儲方式。這裏也試試console.debug(names)。
  3. 你使用的解引用的厚望,就像控制檯的功能。*。這意味着如果你使用console.debug()一個對象,顯示的值將取決於你在瀏覽器中展開顯示樹的那一刻,而不是當該行被調用時!