【问题标题】:Can't get select2 to work with a json file无法让 select2 使用 json 文件
【发布时间】:2015-04-11 13:13:15
【问题描述】:

我正在尝试让 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 也很陌生。

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

【问题讨论】:

  • 您在开发者控制台中看到任何错误吗?
  • Select2:AJAX 结果未在响应的results 键中返回数组。这是错误消息,但我不知道如何解决这个问题...
  • 你能把console.log("AJAX data",data)作为function(data) {starts之后的第一条语句,然后把results改成success吗?
  • 好的,我用IE开发者工具打开了控制台。如上所述,消息“AJAX 结果没有在 Response 的 'results' 键中返回一个数组。但是当我打开 Ajax 数据 [object Object] 时,有一个名为 'laender' 的条目作为一个包含所有信息...
  • 但是我要怎么继续???

标签: javascript jquery ajax json jquery-select2


【解决方案1】:

您的 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 必须是选择元素而不是隐藏输入。

对不起我的英语不好

参考: select2 4.0.0 ajax documentation

【讨论】:

    【解决方案2】:

    您在 json 中的键是:

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

    但在这种情况下 select2 期望:

    "id", "text"
    

    制作:&lt;option value="id"&gt; text &lt;/option&gt;

    你应该使用地图功能:

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

    【讨论】:

      猜你喜欢
      • 2013-09-23
      • 1970-01-01
      • 1970-01-01
      • 2014-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-31
      • 2015-01-24
      相关资源
      最近更新 更多