无法使用select2来处理json文件

时间:2015-02-11 08:30:58

标签: javascript jquery ajax json jquery-select2

我想让select2与外部json文件一起使用: json文件看起来像这样(它被称为data.json,位于我的网站的根目录中):

{"laender":[
    {
        "Land"  :   "Ägypten",
    "kurz"  :   "EG",
        "Fahne" :   "aegypten"

    },
    {
        "Land"  :   "Andorra",
        "kurz"      :       "AN",
        "Fahne" :   "andorra"
    }
]}

Javascript看起来像这样:

$(document).ready(function($) {
function formatValues(data) {
   return data.Land + ' ' + data.Fahne;
}
$('#countrySelect').select2({
    ajax: {
        dataType: "json",
        url: "data.json",
        results: function (data) {
            return {results: data};
        }
    },
    formatResult: formatValues
});

(如此处所述:Select2 load data with Ajax from file)。 HTML中的输出是一个简单的

<div id="countrySelect"></div>

但我无法让它发挥作用。我尝试了很多东西但没有任何反应。我也是json和Ajax的新手。

提前感谢您的帮助! 迪特马尔

2 个答案:

答案 0 :(得分:1)

您的javascript代码适用于4.0.0以下的旧版本select2。如果你使用select2 4.0.0,那么你必须使用processResult而不是result。

尝试更改这些行

results: function (data) {
    return {results: data};
}

喜欢这个

processResults: function (data) {
    return {results: data};
}

有关其他信息,请选择2 4.0.0不再支持隐藏输入。所以,你的#countrySelect必须是select元素而不是隐藏的输入。

抱歉,我的英文不好

参考: select2 4.0.0 ajax documentation

答案 1 :(得分:0)

你在json的钥匙是:

"Land", "kurz", "Fahne",

但在这种情况下,select2期望:

"id", "text"

制作:<option value="id"> text </option>

您应该使用地图功能:

processResults: function(data){
                 return {
                  results: $.map(data, function(smthg){
                   return { id: smthg.kurz, text: smthg.Fahne }
                  })
                 };
                }

它的例子,我不知道你想要使用哪些值,我使用json:

   [
    {"id_pr":"1252","pr":"aaa"},
    {"id_pr":"1253","pr":"bbb"}
     ...
   ]

它有效,但是 我没有尝试:

{   laender: [
              {"id_pr":"1252","pr":"aaa"},
              {"id_pr":"1253","pr":"bbb"}
]}