使用 ajax 在 Select2 上未显示数据

Posted

技术标签:

【中文标题】使用 ajax 在 Select2 上未显示数据【英文标题】:Data Not displaying on Select2 with ajax 【发布时间】:2015-06-21 04:38:57 【问题描述】:

我在 codeigniter 中使用 jQuery select2 和 ajax。

我的 html 代码是:

<div class="col-md-4">
<select id="country" name="country" style="width: 100%;"></select>
<span class='text-red'><?php echo form_error('country_name'); ?></span>
</div>

我的 select2 ajax 代码是:

jQuery('#country').select2(
            ajax: 
                url: '<?php echo site_url('countries/get_countries')?>',
                dataType: 'json',
                type : 'GET',
                data: function (param) 
                
                    return 
                        countries : param.term
                    ;
                ,
                results: function (data) 
                    var myResults = [];
                    jQuery.each(data, function (index, item) 
                        myResults.push(
                            id: item.id,
                            text: item.name
                        );
                    );
                    return 
                        results: myResults
                    ;
                
            
        );

返回的 JSON 字符串是这样的:

["id":"14","name":"India","id":"18","name":"USA","id":"20","name":"jaipur","id":"21","name":"shri lanka"]

此代码未显示任何内容。 这段代码有什么错误?

【问题讨论】:

还需要答案吗?可能不是。时间过得真快。 5年了! 【参考方案1】:

试试 改变results: function (data) success: function (data)

【讨论】:

【参考方案2】:

根据此处的文档:https://select2.github.io/options.html#ajax,处理结果的关键是processResults,而不是results。你试过改变它吗? processResults 的文档还指出:

您可以修改从服务器返回的结果,允许您在最后一刻对数据进行更改,或者找到要传递给 Select2 的响应的正确部分。请记住,结果应作为对象数组传递。该对象应包含一个数据对象数组作为results 键。

【讨论】:

【参考方案3】:

对象数组,请确保您的对象具有以下属性: id(这是标签的值) 文本(这是用于标签中显示的文本) 使用 processResults 而不是 Results。

在 Select 2 对象内的 AJAX 请求中,您必须修改 Select 2 对象的 AJAX 对象的 processResults 属性。 (这是一口)。 在 processResults 属性中,您将使用匿名方法并返回结果。

例子:

$("#selectUpsells").select2(
  ajax:  
   url:'admin/get-product-list',
   type: "post",
   dataType: 'json',
   delay: 250,
   data: function (params) 
    return 

      search_term: params.term
    ;
   ,
   processResults: function (data)  
     return 
        results: $.map(data, function(obj) 
            return  id: obj.id, text: obj.product_name ;
        )
     ;
   ,
   cache: true
  
 );

【讨论】:

以上是关于使用 ajax 在 Select2 上未显示数据的主要内容,如果未能解决你的问题,请参考以下文章

select2 ajax 显示结果但无法选择

如何使用 ajax (codeigniter) 在我的编辑表单中获取和显示选定值到 <select2> 标记中

Select2:使用 AJAX 未显示结果

Select2 ajax不显示结果

select2 ajax 不会显示返回的 json 数据

Yii2 - 使用 Ajax 加载为 Select2 插件设置值