Jquery 将Typeahead与Google自定义搜索引擎结合使用

Jquery 将Typeahead与Google自定义搜索引擎结合使用,jquery,jsonp,typeahead.js,google-custom-search,bloodhound,Jquery,Jsonp,Typeahead.js,Google Custom Search,Bloodhound,我正试图让Twitter的Typeahead+猎犬与谷歌的CSE合作 到目前为止,我已经设法得到返回的结果,但我无法计算出datumTokenizer var results = new Bloodhound({ datumTokenizer: function(data) { return Bloodhound.tokenizers.whitespace(d.value) }, queryTokenizer: Bloodhound.tokenizers.obj.whitesp

我正试图让Twitter的Typeahead+猎犬与谷歌的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
  }
});
看小提琴:

您将看到,showResults()返回的结果是一个数组。但是,从
过滤器:
调用showResults()似乎没有任何作用,因为删除该行没有任何效果。所以我不太清楚到底发生了什么


注意,duffCallback是我从阅读中了解到的。如果有更好的方法来完成这项工作,我洗耳恭听

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

datumTokenizer: function(data) {
 return Bloodhound.tokenizers.whitespace(data.value)
}
请注意,“whitespace”函数现在是如何引用“data”输入参数的,而不是您所使用的“d”

至于你的问题的解决方案,请在此处查看(例如,尝试搜索“athletics”):

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

...&callback=showResults&duffCallback=?
“duffCallback=?”不是必需的,因为在ajax对象中指定“”会自动添加jsonp请求使用的回调详细信息(即“?callback=?”)。此外,“callback=showResults”也不是必需的,因为当发出成功的jsonp请求时,过滤方法由Bloodhound框架隐式调用

我同意当使用Typeahead.js时,远程调用应该如何进行并不明显。一个远程调用的示例,其中指定了ajax对象,并且在Typeahead.js网站上提供了一些有用的文档