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

标签 jquery jsonp typeahead.js google-custom-search bloodhound

我正在尝试让 Twitter Typeahead+Bloodhound 与 Google 的 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
  }
});

参见 fiddle :http://jsfiddle.net/thugsb/3KAjh/

您将看到我已从 showResults() 以数组形式返回结果。但是,从 filter: 调用 showResults() 似乎没有执行任何操作,因为删除该行没有任何效果。所以我不太确定发生了什么。

注意 duffCallback 是我通过阅读 this question 得出的结果。如果有更好的方法来完成这项工作,我洗耳恭听!

最佳答案

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

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

请注意“whitespace”函数现在如何引用“data”输入参数,而不是您正在使用的“d”。

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

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

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

...&callback=showResults&duffCallback=?

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

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

关于jquery - 将 Typeahead 与 Google 自定义搜索引擎结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23394245/

相关文章:

javascript - jQuery 选择器 + SVG 不兼容?

Javascript + jQuery + 实现 getter 和 setter 的函数

javascript - 如何: Swap options with jQuery using Address

jquery - getJSON 从此 API 返回 XML

css - 元素的大小在不应该调整的时候调整

javascript - 动态绑定(bind)预输入选择事件 (jQuery)

Jquery:禁用复选框上的 'click' 事件

jquery - 没有 JSONP 的 JSON 跨站点

javascript - jQuery JSONP 不调用回调

javascript - x-editable + bootstrap 3 + Twitter typeahead.js 不工作