更新:这可能是编码问题,但是我不太确定如何解决或解决它。如果我在Sublime Text 3中打开nba2.json,请进入控制台并键入view.encoding()尽管状态栏中显示Undefined,但仍会得到UTF-8(要在ST3状态栏中显示编码,您必须添加设置为您的用户首选项)。用"show_encoding": true进行同样的操作我在控制台以及状态栏中都得到了ktb.json。原始帖子:美好的一天!我正在尝试将Twitter的typeahead.js集成到我的Web应用程序中。我遵循了examples,一切进行得很顺利。然后,我尝试基于these two示例使用自己的数据源。我以我认为应该可行的方式修改了这些示例(稍后我会看我的代码),但是显然没有解决。因此,我要求您的帮助。我从这段代码开始:var nbaTeams = new Bloodhound({ datumTokenizer: Bloodhound.tokenizers.obj.whitespace('team'), queryTokenizer: Bloodhound.tokenizers.whitespace, prefetch: '../testData/nba.json'});nbaTeams.initialize();$('#multiple-datasets .typeahead').typeahead({ highlight: true},{ name: 'nba-teams', displayKey: 'team', source: nbaTeams.ttAdapter(), templates: { header: '<h3 class="league-name">NBA Teams</h3>' }});请注意,我从here中获取了UTF-8文件。可以从这张图片中很好地看到这一尝试:然后,我修改了nba.json文件,使其看起来像这样(为了方便阅读,我缩短了列表):[ { "team": "Boston Celtics", "test": "one" }, { "team": "Dallas Mavericks", "test": "two" }, { "team": "Brooklyn Nets", "test": "three" }, { "team": "Houston Rockets", "test": "four" }]之所以做出这些更改,是因为这些示例仅处理具有一个属性的JavaScript对象,但是我打算使用的对象由许多属性组成(您将在第二秒看到)。我从上面相应地更改了代码:var nbaTeams = new Bloodhound({ datumTokenizer: Bloodhound.tokenizers.obj.whitespace('team'), queryTokenizer: Bloodhound.tokenizers.whitespace, prefetch: '../testData/nba2.json'});nbaTeams.initialize();$('#multiple-datasets .typeahead').typeahead({ highlight: true},{ name: 'nba-teams', displayKey: 'test', source: nbaTeams.ttAdapter(), templates: { header: '<h3 class="league-name">NBA Teams</h3>' }});如您所见,为了将新字段显示在建议框中,我将nba.json的值更改为displayKey。和以前一样,这工作得很好:现在,我正在使用的数据源如下所示(再次为可读性而缩短):[ { "ktb_be": "1213", "ktb_bezeichnung": "KTB Amberg-Sulzbach", "ba_nummer": "962100", "ba_name": "Amberg Oberpf.", "ursprungs_be": "2-008-1013", "ursprungs_bez": "Amberg", "seitenzahl": "182", "lon": "11.84603545968802", "lat": "49.454826399610624", "dLon": 11.84603545968802, "dLat": 49.454826399610624 }, { "ktb_be": "1213", "ktb_bezeichnung": "KTB Amberg-Sulzbach", "ba_nummer": "962802", "ba_name": "Ammerthal", "ursprungs_be": "2-008-1013", "ursprungs_bez": "Amberg", "seitenzahl": "8", "lon": "11.766274528840961", "lat": "49.44355586068654", "dLon": 11.766274528840961, "dLat": 49.44355586068654 }]所以我继续并再次更改代码以适合数据:var books = new Bloodhound({ datumTokenizer: Bloodhound.tokenizers.obj.whitespace('ktb_be'), queryTokenizer: Bloodhound.tokenizers.whitespace, prefetch: '../testData/ktb.json'});books.initialize();$('#multiple-datasets .typeahead').typeahead({ highlight: true},{ name: 'books', displayKey: 'ktb_bezeichnung', source: books.ttAdapter(), templates: { header: '<h3 class="book-name">Books</h3>' }});好吧,这没有用也就不足为奇了,否则我不会写这个问题。结果如下:我可以保证文件test应该在该位置。我的猜测是我遗漏了一些关键的内容,但是由于它可以与其他数据源一起使用,并且该文件在结构上并不是那么不同,所以我无法找出我的错误。因此,请您感谢我的各种帮助。干杯- 克里斯 (adsbygoogle = window.adsbygoogle || []).push({}); 最佳答案 好吧,我很愚蠢,这就是答案。我已经记下了datumTokenizer: Bloodhound.tokenizers.obj.whitespace('ktb_be'),由于缺乏知识,我忘记了找不到仅包含字母的字符串这一事实,因为字段ktb_be仅包含数字值。可以这么说,我并没有真正理解datumTokenizer是搜索索引。现在我知道了。我猜。 (adsbygoogle = window.adsbygoogle || []).push({}); 10-08 15:16