2016-08-03 38 views
0

我有這個來自服務器的JSON數據。這是有效的JSON每JASONlintselect2-4.0.3在JSON數據中顯示值作爲鍵

問題是當我輸入3位數字(任何虛假)我得到的下拉,並顯示「鍵」作爲值!我不知道爲什麼它是相反的順序?如果我使用.each代替.map,它會正確列出值作爲值(在控制檯日誌中),但在下拉列表中沒有顯示任何內容(在select2 js中報告了一些錯誤)。

JSON:(螢火蟲)

{"4":"2013","3":"2014","1":"2016","6":"winter","7":"birthday","2":"2015","5":"summer","8":"vacation" 
} 

這是我的JS:

$("#selectTags").select2({ 
    tags: true, 
    multiple: true, 
    allowClear: true, 
    //closeOnSelect: false, 
    tokenSeparators: ',',  // [' ',','], 
    minimumInputLength: 3, 
    ajax: { 
     url: "/cgi-bin/json-data.pl", 
     dataType: 'json', 
     delay: 100, 
     data: function (params) { 
      var queryParameters = { 
       term: params.term 
      } 
      return queryParameters; 
     }, 
     processResults: function (data) { 
      return { 
       results: $.map(data, function (key,value) { 
        console.log('key='+key); 
        return { 
         id: key, 
         text: value 
        } 
       }) 
      }; 
     } 
    } 
}); 

回答

1

問題是map,你混淆了參數,第一個是值,第二個是關鍵。 見http://api.jquery.com/jQuery.map/#jQuery-map-object-callback

processResults: function (data) { 
     return { 
      results: $.map(data, function (value, key) { 
       console.log('key='+key); 
       return { 
        id: key, 
        text: value 
       } 
      }) 
     }; 
    } 
+0

我明白了。謝謝,我意識到這一點,但我不知道這是與.map(通常我會假設關鍵值前)的'自然'任務。 – rajeev

+0

這是因爲ECMAScript5 Array.map的回調具有第一個參數 - 值(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map)。所以類似的簽名是爲了使對象兼容。 – Shrike

+0

如果我有這種類型的json會怎麼樣。 –