我正在尝试让 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
}
});
看小提琴:http://jsfiddle.net/thugsb/3KAjh/ http://jsfiddle.net/thugsb/3KAjh/
您将看到我已从 showResults() 以数组形式返回结果。然而,从filter:
似乎没有做任何事情,因为删除该行没有任何效果。所以我不太确定发生了什么事。
请注意 duffCallback 是我从阅读中得出的结果这个问题 https://stackoverflow.com/q/21520609/614566。如果有更好的方法来完成这项工作,我洗耳恭听!
首先,您使用的 datumTokenizer 不太正确。您需要将其更改为:
datumTokenizer: function(data) {
return Bloodhound.tokenizers.whitespace(data.value)
}
请注意“whitespace”函数现在如何引用“data”输入参数而不是您正在使用的“d”。
至于问题的解决方案,请参阅此处的工作原理(例如尝试搜索“田径”):
http://jsfiddle.net/Fresh/FYavC/ http://jsfiddle.net/Fresh/FYavC/
您的代码的主要问题在于您的远程 URL(这也让我感到困惑!)。有问题的查询字符串参数是:
...&callback=showResults&duffCallback=?
“达夫回调=?”不需要指定“数据类型:'jsonp' https://api.jquery.com/jQuery.ajax/#jQuery-ajax-settingsajax 对象中的“自动添加 jsonp 请求使用的回调详细信息(即“?callback=?”)。此外,“callback=showResults”也不是必需的,因为当成功的 jsonp 时,Bloodhound 框架会隐式调用过滤器方法提出请求。
我同意使用 Typeahead.js 时应如何进行远程调用并不明显。一个远程调用的示例,其中指定了 ajax 对象,并且 Typeahead.js 网站上的一些文档会很有用!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)