Typeahead.js是来自 Twitter 的一个非常流行的自动建议库。
我刚刚安装,它似乎不支持通过 JSONP 的跨域请求。我收到有关不允许远程来源的错误。
我已经用谷歌搜索了,我找不到任何相关的东西。
任何人都可以确认是否支持此功能。
Typeahead.js是来自 Twitter 的一个非常流行的自动建议库。
我刚刚安装,它似乎不支持通过 JSONP 的跨域请求。我收到有关不允许远程来源的错误。
我已经用谷歌搜索了,我找不到任何相关的东西。
任何人都可以确认是否支持此功能。
关于您的第一个问题,根据您的错误消息判断,您可能没有正确实现它,因为 typeahead 没有执行 JSONP 请求。
从 Typeahead.js v0.9.3 开始,您可以通过将 'jsonp' 作为 dataType 传递来执行 JSONP 请求,如下所示:
$('.typeahead').typeahead({
name: 'jsonpExample',
remote: {
// ...
dataType: 'jsonp'
}
});
您会发现 typeahead 现在将执行 JSONP 请求。
更新
在回答你的第二个问题。作者的目标是支持 JSONP - 总的来说它确实有效 - 但在当前版本的某些边缘情况下它不能正常工作。
例如,如果您需要使用“回调”以外的查询来触发 JSONP 请求,那么您将被卡住。在这种情况或类似情况下,您有两种选择:
1) 自己修补 typeahead.js 以使 JSONP 正常工作。例如,回调名称问题可以通过一个简单的解决方案来解决
2) 当完整的 jQuery AJAX 对象暴露时,等待 v0.10 发布。不幸的是,它比承诺的交货日期晚了一个月,没有迹象表明它将在未来几周内完成
使用 0.10.5,它可以在远程服务器上运行。jsonp
除了 C Blanchard的回答之外,我还需要ajax
.
var items = new Bloodhound({
...
remote: {
url: 'http://localhost/api/items?q=%QUERY',
ajax: {
jsonp: 'callback',
dataType: 'jsonp'
}
});
items.initialize()
...
$('.typeahead').typeahead(null, {
...
source: items.ttAdapter()
});