使用谷歌自定义搜索引擎的Typeahead



我正试图让Twitter Typeahead+Bloodhound与谷歌的CSE合作。

到目前为止,我已经设法返回了结果,但我无法计算出datumTokenizer。

var results = new Bloodhound({
  datumTokenizer: function(data) {
   return Bloodhound.tokenizers.whitespace(d.value)
  },
  queryTokenizer: Bloodhound.tokenizers.obj.whitespace,
  remote: {
    url: "http://clients1.google.com/complete/search?client=partner&hl=en&sugexp=gsnos%2Cn%3D13&gs_rn=25&gs_ri=partner&partnerid=004914516364918182382%3Ayfqw09r4qvu&types=t&ds=cse&cp=3&gs_id=15&q=%QUERY&callback=showResults&duffCallback=?",
    ajax: $.ajax({type:'GET',dataType:'jsonp',jsonp:'duffCallback'}),
    filter: showResults
  }
});

看小提琴:http://jsfiddle.net/thugsb/3KAjh/

您会看到,我得到了showResults((作为数组返回的结果。然而,从filter:调用showResults((似乎没有任何作用,因为删除该行没有任何效果。所以我不太确定发生了什么。

请注意,duffCallback是我读到这个问题后想做的。如果有更好的方法让这件事成功的话,我洗耳恭听!

首先,您使用的datumTokenizer不太正确。您需要将其更改为:

datumTokenizer: function(data) {
 return Bloodhound.tokenizers.whitespace(data.value)
}

请注意,"空白"函数现在引用的是"data"输入参数,而不是您使用的"d"。

至于你的问题的解决方案,请参阅这里的工作(例如,尝试搜索"田径"(:

http://jsfiddle.net/Fresh/FYavC/

你的代码的主要问题是在你的远程URL中(这也让我感到困惑!(。有问题的查询字符串参数为:

...&callback=showResults&duffCallback=?

"dufCallback=?"不是必需的,因为在ajax对象中指定"datatype:'jsonp'"会自动添加jsonp请求使用的回调详细信息(即"?callback=??"(。此外,不需要"callback=showResults",因为当成功发出jsonp请求时,Bloodhound框架会隐式调用过滤器方法。

我同意,在使用Typeahead.js时,远程调用应该如何进行并不明显。在Typeahead js网站上,指定ajax对象的远程调用示例和一些文档会很有用!

相关内容

  • 没有找到相关文章

最新更新