选择2 - 无限滚动未加载包含远程数据的下一页

时间:2015-12-29 15:55:05

标签: javascript ajax jquery-select2-4

我正在使用Select2 4.0.1,我使用ajax根据用户输入填充结果,但每当我搜索任何select2列出第一页结果,但连续页面未加载时,也请求是滚动的第2页。似乎是我错过了什么。

$multiselect = $(element).select2({
    closeOnSelect: false,
    multiple: true,
    placeholder: 'Assign a new tag',
    tags: true,
    tokenSeparators: [","],
    ajax: {
      url: '/search_url',
      dataType: 'json',
      type: 'GET',
      delay: 250,
      data: function(params) {
        return {
          search: params.term,
          page: params.page
        };
      },
      processResults: function(data, params) {
        var more, new_data;
        params.page = params.page || 1;
        more = {
          more: (params.page * 20) < data.total_count
        };
        new_data = [];
        data.items.forEach(function(i, item) {
          new_data.push({
            id: i.name,
            text: i.name
          });
        });
        return {
          pagination: more,
          results: new_data
        };
      },
      cache: true
    }
  })

非常感谢任何帮助.Thnx:)

1 个答案:

答案 0 :(得分:4)

这是我上周工作的代码。我在使用不同的运输方式,但这不应该有所作为。关于在滚动时缺少分页工作,我遇到了同样的问题。我的问题最终是我的{'pagination':{'more':true}}函数中没有正确的processResults格式。我能看到的唯一可能对您有用的是“修复”data函数与processResults函数中的页数。

当您滚动到列表底部时,是否看到“正在加载更多结果...”标签?您是否尝试在调试时将more值硬编码为true

        this.$(".select2").select2({
            'ajax': {
                'transport': function (params, success, failure) {
                    var page = (params.data && params.data.page) || 1;
                    app.do('entity:list:search',{'types':['locations'],'branch':branch,'limit':100,'page':page,'term':params.data.term})
                    .done(function(locations) {
                        success({'results':locations,'more':(locations.length>=100)});
                    });
                }
              , 'delay': 250
              , 'data':function (params) {
                    var query = {
                        'term': params.term
                      , 'page': params.page || 1
                    };

                    return query;
                }
              , 'processResults': function (data) {
                    return {
                        'results': data.results
                      , 'pagination': {
                            'more': data.more
                        }
                    };
                }
            }
          , 'templateResult': that.formatResult
          , 'templateSelection': that.formatSelection
          , 'escapeMarkup': function(m) { return m; }
        });