在typeahead搜索中出现重复记录

我正在使用typeahaead.js实现typeahead搜索,但是作为typeahead搜索框中的类型,在建议下拉列表中每个记录都会出现两次。我检查了数据源(即POST api调用),它只有唯一的记录。我在哪里做错了?帮助或相关链接。

即便控制也不会重复检测器。

这里讨论了类似的问题,但没有解决方案。

var result = new Bloodhound({ datumTokenizer: Bloodhound.tokenizers.obj.whitespace('value'), queryTokenizer: Bloodhound.tokenizers.whitespace, remote: { url: 'https://api1.com/idocs/api', wildcard: '%QUERY', rateLimitWait: 300 , transport: function (opts, onSuccess, onError) { var url = opts.url; $.ajax({ url: url, type: "POST", success: onSuccess, error: onError, }); }, filter: function (data) { if (data) { return $.map(data, function (object) { return data.data.results.data; }); } } }, dupDetector: function (remoteMatch, localMatch) { return remoteMatch.id === localMatch.id; } }); result.initialize(); $('input').typeahead(null, { name: 'result', displayKey: 'id', source: result.ttAdapter(), templates: { empty: ['
', 'no results found', '
'], suggestion: function (data) { return '

' + data.basicinfo.object_name + '

'; } }, });

我找到了解决方案,我在filter中做错了。 我的解决方案是

 var result = new Bloodhound({ datumTokenizer: Bloodhound.tokenizers.obj.whitespace('value'), queryTokenizer: Bloodhound.tokenizers.whitespace, remote: { url: 'abc.com&qterm=#%QUERY', wildcard: '%QUERY', rateLimitWait: 300 , transport: function (opts, onSuccess, onError) { var url = opts.url.split("#")[0]; var query = opts.url.split("#")[1]; $.ajax({ url: url + query, type: "POST", success: onSuccess, error: onError, }); }, filter: function (data) { if (data) { var result = data.data.results.data; return $.map(result, function (object) { return { name: object.basicinfo.object_name, id: object.basicinfo.id }; }); } else { return {}; } } }, dupDetector: function (remoteMatch, localMatch) { return remoteMatch.id === localMatch.id; } }); function onSuccess(data) { } result.initialize(); $('input').typeahead(null, { hint: true, name: 'result', displayKey: 'name', source: result.ttAdapter(), templates: { empty: ['
', 'no results found', '
'].join('\n'), suggestion: function (data) { return '

' + data.name + '

\n\r'; } }, })