Typeahead和Bloodhound - 如何获取JSON结果

18

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

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

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()
    });

哪个方法不起作用。我应该如何更改代码才能使其工作?


3
http://vocab.nic.in/rest.php/country/json和你的网站是否属于同一域名?如果不是,则需要使用“remote”而不是“prefetch”。 - Ben Smith
2个回答

16
// 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()
});

示例Codepen

Typeahead输出

Typeahead输出

备注:

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

1
在 datumTokenizer 中,我使用了 countries.countries,应该是 countries.value。已更新代码和 Codepen。Chrome 对我来说有点小问题,请使用 Firefox :) - Jens A. Koch
4
这个解决方案已经失效了。我自己尝试过,并且在你的CodePen示例上也尝试过。 - Dean
1
真的,停止工作了。嗯,它已经超过一年了。我猜又是其中一个API改变了。 - Jens A. Koch
1
它总是显示5个结果,无论搜索哪个国家...例如 孟加拉国 - StreetCoder
4
抱歉。说实话,我认为 Twitter 放弃了 typeahead.js。我们看了它拥有 13000 颗星、完整的 bug 追踪器却没有维护者,且软件已经失效,最近一次更新是在2015年。我觉得这说明了问题本身,不是吗?因此,您可以尝试其中一个分支:https://github.com/corejavascript/typeahead.js --- 我相信他们已经解决了这个问题。我没有测试过。同时,你也可以随意修改我的 codepen,将 typeahead.js 替换为分支的脚本。问候,Jens - Jens A. Koch
显示剩余4条评论

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接