我正在尝试使用typeahead.js从我自己的服务器(flask端点)获取作者列表。当我为Bloodhound使用local
来源时,一切顺利,只有当我必须从服务器获取数据时才会显示所有结果。
所以这就是代码:
var authors = new Bloodhound({
datumTokenizer: Bloodhound.tokenizers.whitespace,
queryTokenizer: Bloodhound.tokenizers.whitespace,
// local: ["Aad, Georges", "Abajyan, Tatevik", "Abbott, Brad"],
remote: {
url: '/search/authors?q=%QUERY',
transform: function (json) {
var names = $.map(json.results, function (author) {
return author.full_name;
});
console.log(names);
return names;
}
}
});
$('#author-suggest').typeahead(null, {
source: authors
});
我确保打印从网址返回的名称,它们似乎与我可能放入本地变量的名称相同:
$ Array [ "Aad, Georges", "Abajyan, Tatevik", "Abbott, Brad" ]
$ Array [ "Aad, Georges", "Abajyan, Tatevik", "Abbott, Brad" ]
…
当我测试它时会发生一些奇怪的事情。当我尝试输入input
框时 - 我得到了建议,但它只是控制台中打印的一部分。当我输入时,它们也不会动态变化(Aad, Georges
仍然是第一个建议,即使我已经在"Abbott"
)。
另一个特殊的事情是,并非所有的名字都被建议,即使它们都清楚地从服务器上回来了。当服务器发送3个名称时,只有前2个在建议中。当它发送4个名字时,会出现1个建议。一般模式是:
[(1 -> 1), (2 -> 2), (3 -> 2), (4 -> 1), (5 -> 0), (6 -> 5), (7 -> 5)… ]
一对中的第一个数字代表收到的作者数量,第二个数字代表建议数量。到底发生了什么事呢?!
提前致谢!