一尘不染

Select2 JS使用Ajax加载远程数据

ajax

我正在使用Select2 JS版本4.0.0-rc.1,并且无法通过远程Ajax方法加载建议。

以下是标记和代码

<select class="form-control input-sm" id="selFrame1" name="selFrame1">
   <option> Select Frame </option>
</select>

JavaScript jQuery

$('#selFrame1').select2({
        ajax: {
          url: siteUrl+"suggest/frames",
          dataType: 'json',
          delay: 250,
          method:'POST',
          data: function (params) {
            return {
            q: params.term, // search term
            page: params.page
            };
         },
         processResults: function (data, page) {
         // parse the results into the format expected by Select2.
         // since we are using custom formatting functions we do not need to
         // alter the remote JSON data

           return {
             results: data.result
           };
          },
         cache: true
        }
});

服务器返回的Json结果

{results: [{"Code":"123360000"},{"Code":"123360358"},{"Code":"123364000"},{"Code":"123400000"}], more: false }

我完全不确定是否需要编写特定的函数来显示建议,有关Ajax部分的评论指出,我们不应更改结果Json数据。

现在有人请告诉我,让代码正常工作以显示建议还需要做些什么。

我想随着新版本的select2发生了很多变化。


阅读 301

收藏
2020-07-26

共1个答案

一尘不染

您的响应将作为Select2
3.x响应返回,这很好。因此,我们提供了此processResults方法(以前是results),因此您可以在客户端修改响应。

在您的情况下,您的响应中包含results键,但是您的processResponse函数引用的result键不存在。如果您将其更改为

processResults: function (data, page) {
// parse the results into the format expected by Select2.
// since we are using custom formatting functions we do not need to
// alter the remote JSON data

  return {
    results: data.results,
    pagination: {
      more: data.more
    }
  };
},

然后事情应该开始工作。这还将more响应的现有属性映射到pagination我们在Select2 4.0中迁移到的新密钥。

2020-07-26