如何使用AJAX预加载select2插件?

时间:2019-04-10 14:04:40

标签: jquery-select2

在此示例中:https://jsfiddle.net/wqd4ebyn/2/

$(document).ready(function() {
    $('.js-example-basic-single').select2(
      {
          ajax: {
          url: 'https://jsonplaceholder.typicode.com/todos',
          dataType: 'json'
          }
      }
    );
});

我正在尝试使用ajax获取远程数据并使用当前选项预加载列表。除非我删除了ajax,否则它不起作用:

$(document).ready(function() {
    $('.js-example-basic-single').select2(
    );
});

我的名单很大。我想要的是列出一些非常常见的选项,其余的都由ajax列出。当前的实现确实允许同时执行静态选项或动态选项。我都需要。

1 个答案:

答案 0 :(得分:0)

请查看官方文档:https://select2.org/data-sources/ajax 您需要具有一个处理请求参数的功能和另一个处理响应数据的功能。

您尝试过吗? How to use Select2 with JSON via Ajax request?

编辑: 我在这里用您的代码创建了一个JSFIddle:https://jsfiddle.net/7bdeo38c/6/

HTML:

<select class="js-example-basic-single" name="state"></select>

JS:

$(document).ready(function() {
    $('.js-example-basic-single').select2(
      {
        ajax: {
          url: 'https://jsonplaceholder.typicode.com/todos',
          dataType: 'json',
          data: function (params) {
            return {
              q: params.term // search term
            };
          },
          processResults: function (data) {
            return {
              results: data // results
            };
          }
        },
        templateResult: formatResults, // Controls how the dropdown looks
        templateSelection: formatSelection, // Controls what is displayed after selecting an item
        escapeMarkup: function (m) { return m; }, // Let our custom formatter work
      }
    );
});

function formatResults (data) {
  if (data.loading) {
    return data.text;
  }

  var result;
  if (data.completed) {
        result = "<div class='select2-result-repository__description'>" + data.title + "</div>";
  }
  return result;
}

function formatSelection (data) {
  return data.id + ' - ' + data.title || data.text;
}

Select2官方文档中存在类似的示例。有关GitHub存储库示例的完整代码,请参见Ajax章的结尾。 https://select2.org/data-sources/ajax