如何在 select2 中为 select 标签添加新选项 - 远程数据

how to add new option for select tag in select2 - remote data

我已经实现了一个应用程序,其中一个表单的下拉字段中有很多数据,加载该页面需要一些时间,所以我想在 ajax 调用中加载它,但是回调数据没有创建新的选项标签并附加到 select 标签,这是我试过的

我尝试了所有这些代码,但没有一个有效!

$(document).ready(function () {
        $('#guestinfo').select2({
            ajax: {
                url: '{% url "booking:return_ajax_guests" %}',
                dataType: 'json',
                processResults: function (data) {
                    console.log(data.length)
                    if(data.length > 0){
                        for(i=0;i <= data.length;i++){
                            //var options = data[i].full_name
                            //console.log(options)
                            //$('#guestinfo').append("<option value='"+options+"'>"+options+"</option>")
                            //$('#guestinfo').trigger('change'); 

                            //var opts = new Option("option text", "value");
                            //$(o).html("option text");
                            //$("#guestinfo").append(o);                            
                            $('#guestinfo').append($('<option>', { 
                                value: options,
                                text : options 
                            }));                            
                        }
                    }
                    //return {
                    //    results: $.map(data, function (item) {
                    //        $('#guestinfo').append("<option value='"+item.full_name+"' selected>"+item.full_name+"</option>")
                    //        $('#guestinfo').trigger('change'); 
                    //        return {full_name: item.full_name, city: item.city__name};
                    //    })
                        //console.log(results)
                    //};
                }
            },
            minimumInputLength: 0
        });

    })
<div class="col-span-5 groupinput relative bglightpurple mt-2 rounded-xl">
    <label class="text-white absolute top-1 mt-1 mr-2 text-xs">{% trans "full names" %}</label>
    <select name="guestinfo" id="guestinfo" class="visitors w-full pr-2 pt-6 pb-1 bg-transparent focus:outline-none text-white">
        <option value="------">---------</option>
    </select>
</div>

select2 版本:2.0.7 这是我的服务器端代码 (django)

@login_required
def return_ajax_guests(request):
    if request.is_ajax():
        term = request.GET.get('term')
        all_guests = Vistor.objects.all().filter(full_name__icontains=term)        
        return JsonResponse(list(all_guests.values('full_name','city__name','dob')),safe=False)

控制台显示的数据很好!但我不能将它附加到 select 标签中!请问我做错了什么吗? 先感谢您 .. 已更新 控制台中 for 循环的数据

console.log(选项) console.log(数据)

首先,无需手动创建选项,select2 在提供正确数据时自动创建它们。

话虽如此,您的数据应采用 [{id: 'id', text: 'text'}, ...] 格式,以便它与 select2 一起正常工作。

试试这个

$('#guestinfo').select2({
    ajax: {
        url: '{% url "booking:return_ajax_guests" %}',
        dataType: 'json',
        data: function(params){ // you can delete this part if you don't intend to filter the data on the server
            return {
                search: params.term, // search term
            };
        },
        processResults: function (data, params) {
            return {
                results: data.map(({full_name}) => ({id: full_name, text: full_name}))
            };
        }
    },
    minimumInputLength: 0
});