2016-08-03 35 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会怎么样。 –