可以't让select2处理json文件

Can't get select2 to work with a json file

本文关键字:select2 处理 json 文件 可以      更新时间:2023-09-26

我正在尝试让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从文件中用Ajax加载数据)。HTML中的输出是一个简单的

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

但我无法让它发挥作用。我尝试了很多事情,但都没有成功。此外,我对json和Ajax还相当陌生。

感谢您提前提供的帮助!Dietmar

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

尝试更改这些线路

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

喜欢这个

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

有关更多信息,select2 4.0.0不再支持隐藏输入。因此,您的#countrySelect必须是select元素,而不是隐藏输入。

对不起,我的英语不好

参考:select2 4.0.0 ajax文档

json中的密钥是:

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

但在这种情况下选择2,期望:

"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"}
]}