Select2:使用AJAX请求从远程数据源搜索结果

时间:2015-03-21 23:00:43

标签: jquery angularjs jquery-select2

我的html页面中有这个Select2:

<input class="users form-control" type="hidden" />

在我的js函数中,我这样做了:

$(".users").select2({        
    allowClear: true,
    minimumInputLength: 3,
    multiple:true,
    ajax: {
        data: function (term) {
            return {
                'q': term
            };
        },                  
        results: function (data) {
            return { results: data };
        },
        transport: function(queryParams) {
            var params = {'term':queryParams.data.q};
            console.log(params);
            service.getUsersByQuery(params,function (data) { 

                return data;
            });
        }
    }    
});

我的服务是:

this.getUsersByQuery= function (criteria,callback){

        $http({
            url: url,
            method: "POST",
            data: criteria
        }).success(function(data){          
                    callback(data);             
            }).error(function(err){
                console.error('Error: %s error: %O', 'failed.', err);
            });
    }

我的结果位于transport,但我无法在processResult中获得结果。我需要做些什么改变才能实现这个目标?

我正在使用Select2 3.4.5。

1 个答案:

答案 0 :(得分:0)

您似乎有三个问题

  1. 你正在使用2013年底发布的Select2 3.4.5。从那时起已经有大量的bug修复和改进(并且4.0.0几乎已经发布),因此获得支持将很困难在任何渠道。
  2. 您使用the 4.0.0 documentation代替the 3.5.2 documentation。 4.0.0中发生了一些变化,这些变化解释了为什么您的代码没有完全按照您期望的方式工作。
    1. 您应该使用ajax.results代替ajax.processResults。这解释了为什么你的方法永远不会被调用,它没有被正确命名。
  3. 您的ajax.transport方法设置不正确。您应该通过query.success方法(以及query.error中的错误)传回结果,以便Select2可以处理它们。
  4. 所以,把所有这些放在一起......

    $(".users").select2({
        minimumInputLength: 3,
        multiple: true,
        ajax: {
            data: function (term) {
                return {
                    'q': term
                };
            },                  
            results: function (data) {
                return { results: data };
            },
            transport: function(queryParams) {
                var params = {
                    'term': queryParams.data.q
                };
    
                console.log(params);
    
                service.getUsersByQueru(params, function (data) { 
                    queryParams.success(data);
                });
            }
        }    
    });
    

    假设从您的服务传回的data格式正确,哪个应该可以正常工作。