Select2 Ajax Laravel 5.2 - 分页结果不起作用?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Select2 Ajax Laravel 5.2 - 分页结果不起作用?相关的知识,希望对你有一定的参考价值。

我有以下select2加载带分页的远程数据:

$(".js-location-lookup").select2({
    ajax: {
        url: '/locations',
        dataType: "json",
        delay: 150,
        data: function (params) {
            return {
                term: params.term, 
                page: params.page
            };
        },
        processResults: function (data, params) {

            params.page = params.page || 1;

            return {
                results:  $.map(data.data, function (item) {
                    return {
                        id: item.id,
                        text: item.name

                    };
                }),
                pagination: {
                    more: (params.page * data.per_page) < data.total
                }

            };
        },
        cache: true
    },
    minimumInputLength: 2,
    placeholder: "-- Select --",
    allowClear: true
});

控制器动作:

 public function getLocations(Request $request)
{
    $term = $request->input('term');

    $data = Location::where('name', 'LIKE', '%'.$term.'%')->paginate(5);

    $data->appends(['term' => $term ]);

    return response()->json($data);

}

json:

{
   "total":22,
   "per_page":5,
   "current_page":1,
   "last_page":5,
   "next_page_url":"/locations?term=en&page=2",
   "prev_page_url":null,
   "from":1,
   "to":5,
    "data":[
        {"id":1,"name":"England"},
        {"id":13,"name":"London (Central)"},
        {"id":18,"name":"North East England"},
        {"id":23,"name":"North West England"},
        {"id":30,"name":"South East England"}
     ]
  }

只有第一页加载并显示文本load more results但它不滚动或做任何事情来显示下一组结果?

答案

如果显示的每页项目数小于打开时下拉框的高度,则选择小部件上的滚动条不会出现,并且会观察到上述行为,即您无法滚动以加载下一组数据的。

修复是将页面分页数增加到每页10页,以便它们超过下拉框的高度。

不确定你是否会将此作为一个错误。

另一答案

将以下代码与最新的select2版本库一起使用。

控制器代码:

public function getLocations(Request $request)
{
    if ($request->ajax()) {
        $page = $request->page;
        $resultCount = 5;

        $offset = ($page - 1) * $resultCount;

        $locations = Location::where('name', 'LIKE', '%' . $request->term. '%')
                                ->orderBy('name')
                                ->skip($offset)
                                ->take($resultCount)
                                ->selectRaw('id, name as text')
                                ->get();

        $count = Count(Location::where('name', 'LIKE', '%' . $request->term. '%')
                                ->orderBy('name')
                                ->selectRaw('id, name as text')
                                ->get());

        $endCount = $offset + $resultCount;
        $morePages = $count > $endCount;

        $results = array(
              "results" => $locations,
              "pagination" => array(
                  "more" => $morePages
              )
          );

        return response()->json($results);
    }
    return response()->json('oops');
}

查看/ JS代码:

$(document).ready(function() {
    $('.js-location-lookup').select2({
        delay : 200,
        ajax: {
            url: '/locations',
            dataType: 'json',
            cache: true,
            data: function(params) {
              return {
                  term: params.term || '',
                  page: params.page || 1
              }
          },
        }
    });
});

以上是关于Select2 Ajax Laravel 5.2 - 分页结果不起作用?的主要内容,如果未能解决你的问题,请参考以下文章

Select2 Ajax Laravel - 结果未显示

使用 Laravel 和 Select2 向 HTTP 提供 HTTPS 的 jQuery AJAX 请求

如何在 laravel 中使用 AJAX 数据时设置 Select2 的选定值?

使用 select2 和 ajax laravel 资源进行多选

Laravel 5.4 刀片和 select2 不工作

Select2 在调用时使用动态 Ajax URL