Select2 Ajax Laravel - 结果未显示

Posted

技术标签:

【中文标题】Select2 Ajax Laravel - 结果未显示【英文标题】:Select2 Ajax Laravel - results not showing 【发布时间】:2016-09-11 22:54:36 【问题描述】:

JS

$("#location").select2(
        ajax: 
        url: "/search/locations",
        dataType: 'json',
        delay: 250,
        data: function (params) 
          return 
            q: params.term, // search term
          ;
        ,
        processResults: function (data) 
            return 
            results: data
            ;
        ,
        cache: true
      ,
        minimumInputLength: 1,
        placeholder: function()
        $(this).data('placeholder');
        
      );

控制器

 public function searchLocations()
        
            $q = Input::get('q');
            $results = Location::where('suburb', 'LIKE', '%'. $q . '%')
               ->orWhere('state', 'LIKE', '%'. $q . '%')
               ->orWhere('postcode', 'LIKE', '%'. $q . '%')
               ->get();
            return Response::json( $results ); 
        

我可以看到正在发出的 ajax 请求,并正在接收数据,但它没有显示结果。我正在使用最新版本的 Select2 (v4.0.2)

【问题讨论】:

您打算将 JSON 的哪些字段用作选项的值和标签? 郊区、州、邮政编码旨在显示在选择中 返回结果时,Select2 是说No result found 还是列出一堆(看似)空的选项? 如果我输入应该显示的内容,则选择完全为空 - 如果我输入一堆随机的内容,那么它会显示“未找到结果” 【参考方案1】:

当您从远程源加载自定义数据时,Select2 通常不知道如何处理它们。您需要通过为选项设置 templateSelection 和为所选选项设置 templateResult 来指定每个结果的格式,如下所示:

function locationResultTemplater(location) 
      return location.suburb + " " + location.state + " " + location.postcode;
 

function locationSelectionTemplater(location) 
      if (typeof location.suburb !== "undefined") 
          return locationResultTemplater(location);
      
      return location.text; // I think its either text or label, not sure.

$("#location").select2(
        ajax: 
        url: "/search/locations",
        dataType: 'json',
        delay: 250,
        data: function (params) 
          return 
            q: params.term, // search term
          ;
        ,
        processResults: function (data) 
            return 
            results: data
            ;
        ,
        cache: true
      ,
        minimumInputLength: 1,
        placeholder: function()
           $(this).data('placeholder');
        ,
        templateResult: locationResultTemplater,
        templateSelection: locationSelectionTemplater

  );

请注意,为了返回 html 标记而不是纯文本,您需要让模板函数返回一个 jQuery 对象选择器,例如return $("<div class='styleme'>Content</div>);

【讨论】:

感谢@apokryfos 现在显示结果。作为选择中的默认值,它显示“未定义未定义未定义”。显然缺少“郊区、州、邮政编码”的值。知道如何用占位符/默认值替换它吗? 它这样做很奇怪。这意味着默认情况下选择了一个选项。我已经进行了编辑,但请确保您没有在 <select> 定义中默认选择某些内容。

以上是关于Select2 Ajax Laravel - 结果未显示的主要内容,如果未能解决你的问题,请参考以下文章

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

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

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

Laravel 5.4 刀片和 select2 不工作

当 Ajax 响应来自使用 select2 的 laravel 控制器时,如何检查 JQuery 附加选项中的条件?

Select2:使用 AJAX 未显示结果