Javascript 当剩下一个远程结果时,Typeahead remote返回两个未定义的结果
我正在构建一个从远程json API搜索信息的程序。我无法预取任何数据,因为数据集非常大(3000+),为了获得预取结果,我需要提供单字母查询Javascript 当剩下一个远程结果时,Typeahead remote返回两个未定义的结果,javascript,typeahead.js,typeahead,twitter-typeahead,Javascript,Typeahead.js,Typeahead,Twitter Typeahead,我正在构建一个从远程json API搜索信息的程序。我无法预取任何数据,因为数据集非常大(3000+),为了获得预取结果,我需要提供单字母查询 我遇到的问题是,当我在搜索中只剩下一个结果时,Typehead停止给我结果,只显示两个未定义的项作为结果 这就是它看起来的样子: 我已经尝试了我能想到的一切,通过控制台在这一点上尝试和调试这一点,但找不到任何地方,看看这些数据是从哪里来的 这是用于侦探犬和typeahead初始化的代码 var items = new Bloodhound({
我遇到的问题是,当我在搜索中只剩下一个结果时,Typehead停止给我结果,只显示两个未定义的项作为结果 这就是它看起来的样子: 我已经尝试了我能想到的一切,通过控制台在这一点上尝试和调试这一点,但找不到任何地方,看看这些数据是从哪里来的 这是用于侦探犬和typeahead初始化的代码
var items = new Bloodhound({
datumTokenizer: function (datum) {
return Bloodhound.tokenizers.whitespace(datum.k);
},
queryTokenizer: Bloodhound.tokenizers.whitespace,
remote: {
url: App.target + "crm/sf/list/item/%QUERY/5",
filter: function (parsedResponse) {
return parsedResponse.Listing.list.entries;
},
}
});
items.initialize();
$('#itemNoSrch').typeahead(null, {
autoselect: true,
displayKey: 'k',
source: items.ttAdapter()
}).on('typeahead:selected', function (obj, datum, name) {
App.searchData.itemNo = datum.k.replace("/", "*");
$('#itemSrchPlaceholder').val(datum.k);
App.itemInvalid = false;
});
编辑:
下面是crm/sf/list/item/%QUERY/5的JSON响应,其中查询是a
{
"Listing": {
"list": {
"entries": [
{
"k": "A-10-10",
"v": 1320
},
{
"k": "A-10-7",
"v": 4841
},
{
"k": "A-10-8",
"v": 4821
},
{
"k": "A14YV4835",
"v": 1327
},
{
"k": "A0554835",
"v": 1325
}
]
}
}
}
这是我如何只能假设输出在发生这种情况时出现的,我使用了Google chrome最新稳定版本上的控制台
我将提供一个基于API的fiddle,但服务器目前没有添加跨源标题
请告诉我所需的任何其他信息。我发现了问题!当我的远程数据集是一个结果时,它作为对象而不是数组返回 输出结果如下所示
{
"Listing": {
"list": {
"entries": {
"k": "A-10-10",
"v": 1320
}
}
}
因此,我在过滤器中添加了以下内容
filter: function (parsedResponse) {
if(parsedResponse.Listing.list.entries instanceof Array){
return parsedResponse.Listing.list.entries;
}else{
return [parsedResponse.Listing.list.entries];
}
},
我发现了问题!当我的远程数据集是一个结果时,它作为对象而不是数组返回 输出结果如下所示
{
"Listing": {
"list": {
"entries": {
"k": "A-10-10",
"v": 1320
}
}
}
因此,我在过滤器中添加了以下内容
filter: function (parsedResponse) {
if(parsedResponse.Listing.list.entries instanceof Array){
return parsedResponse.Listing.list.entries;
}else{
return [parsedResponse.Listing.list.entries];
}
},
如果您查看JavaScript控制台,您应该会看到各个AJAX请求,您能确认您在最终查询中返回了结果吗?“我遇到的问题是,当我在搜索中只剩下一个结果时”-您能否更详细地了解这一点,因为它不清楚?另外,响应数据如何查找显示为未定义的项目?向我们展示您的响应数据的结构可能很有用。您能分享一个远程调用
crm/sf/list/item/%QUERY/5
将返回什么的示例吗?@JasonSperske我在控制台中找不到AJAX请求,除了通过源代码查找它之外(还没有时间)我不知道在哪里添加断点来找到它。@Fresh我在问题中添加了更多信息,根据我能找到的内容,返回了什么。如果你知道一个更好的地方,让我知道,我会挖掘它。如果你看你的JavaScript控制台,你应该会看到单独的AJAX请求,你能确认你在最后的查询中得到了结果吗?“我遇到的问题是,当我在搜索中只剩下一个结果时”-由于不清楚,您能详细介绍一下吗?另外,响应数据如何查找显示为未定义的项目?向我们展示您的响应数据的结构可能很有用。您能分享一个远程调用crm/sf/list/item/%QUERY/5
将返回什么的示例吗?@JasonSperske我在控制台中找不到AJAX请求,除了通过源代码查找它之外(还没有时间)我不知道在哪里添加断点来找到它。@Fresh我在问题中添加了更多信息,根据我能找到的内容,返回了什么。如果你知道一个更好的地方,让我知道,我会挖掘它。谢谢!返回对象时遇到相同问题。谢谢!与正在返回的对象有相同的问题。