Typeahead 和 Bloodhound - 如何获取 JSON 结果

Posted

技术标签:

【中文标题】Typeahead 和 Bloodhound - 如何获取 JSON 结果【英文标题】:Typeahead and Bloodhound - how to get JSON result 【发布时间】:2014-05-08 22:51:24 【问题描述】:

我有国家的 json 列表:http://vocab.nic.in/rest.php/country/json

我正在尝试使用 Bloodhound 建议引擎获取 country_id 和国家/地区名称。 O 尝试了以下代码:

var countries = new Bloodhound(
    datumTokenizer: Bloodhound.tokenizers.obj.whitespace('country_name'),
    queryTokenizer: Bloodhound.tokenizers.whitespace,
    limit: 10,
    prefetch: 
        url: 'http://vocab.nic.in/rest.php/country/json',
        filter: function(response) 
            return response.countries;
        
    
);

$('#my-input').typeahead(
        hint: true,
        highlight: true,
        minLength: 1
    ,
    
        name: 'states',
        displayKey: 'value',
        source: countries.ttAdapter()
    );

这不起作用。我应该如何更改代码以使其正常工作?

【问题讨论】:

vocab.nic.in/rest.php/country/json 是否与您的网站在同一个域中?如果没有,那么您需要使用“remote”而不是“prefetch” 【参考方案1】:
// instantiate the bloodhound suggestion engine
var countries = new Bloodhound(  
  datumTokenizer: function(countries) 
      return Bloodhound.tokenizers.whitespace(countries.value);
  ,
  queryTokenizer: Bloodhound.tokenizers.whitespace,
  remote: 
    url: "http://vocab.nic.in/rest.php/country/json",
    filter: function(response)       
      return response.countries;
    
  
);

// initialize the bloodhound suggestion engine
countries.initialize();

// instantiate the typeahead UI
$('.typeahead').typeahead(
   hint: true,
    highlight: true,
    minLength: 1
  , 
  
  name: 'countries',
  displayKey: function(countries) 
    return countries.country.country_name;        
  ,
  source: countries.ttAdapter()
);

Example Codepen

Typeahead 输出

注意事项:

您服务器上的数据 = “预取”。 来自外部的数据 =“远程”

【讨论】:

在 datumTokenizer 中我使用了 countries.countries,它必须是 countries.value。相应地更新了代码和 Codepen。 Chrome 对我来说是小丑,使用 firefox :) 此解决方案不再有效。我自己试过了,也在你的 codepen 例子上试过。 没错,停止工作。嗯,一岁多了。我猜,其中一个 API 又发生了变化。 我知道这已经有一段时间了,codepen 似乎不再工作了......尝试搜索“保加利亚”。我得到的列表和你的截图一样。 我很抱歉。老实说,我认为 twitter 放弃了 typeahead.js。我们查看了 13000 颗星,一个没有维护者的完整 bugtracker 和一个损坏的软件,最后一个版本是 2015 年。我认为这不言自明? ...所以,尝试其中一个分支:github.com/corejavascript/typeahead.js --- 我相信他们解决了这个问题。未测试。也可以随意修改我的 codepen,将 typeahead.js 与 fork 的脚本进行交换。问候,延斯【参考方案2】:

注意:如果您执行了所有这些操作但仍然无法正常工作,请检查您的 data.json 文件(无论您将其命名为什么)

良好格式的示例: https://github.com/twitter/typeahead.js/blob/gh-pages/data/countries.json

['data1','data2',.....]

我被不合适的报价绊倒了。

【讨论】:

以上是关于Typeahead 和 Bloodhound - 如何获取 JSON 结果的主要内容,如果未能解决你的问题,请参考以下文章

Typeahead.js 和 Bloodhound.js 与 C# WebForms WebMethod 的集成

typeahead.js:返回空查询的所有 Bloodhound 记录

Typeahead.js / Bloodhound 只显示一个结果 [重复]

Typeahead v0.10.2 和 Bloodhound - 使用嵌套的 JSON 对象

Bootstrap Tokenfield 与 Typeahead / Bloodhound 排除令牌

使用 Django / Python 为 Typeahead / Bloodhound 提供远程 JSON 数据