Typeahead.js是来自Twitter的一个非常受欢迎的自助提供库。
我刚刚安装,它似乎不支持通过JSONP的跨域请求。 我得到了关于远程起源的错误。
我用Google搜索了一下,但找不到与之相关的任何内容。
任何人都可以确认是否支持此功能。
答案 0 :(得分:5)
关于您的第一个问题,根据您的错误消息判断,您可能没有正确实现它,因为typeahead没有执行JSONP请求。
从Typeahead.js v0.9.3 开始,你可以通过传递'jsonp'作为dataType来执行JSONP请求,如下所示:
$('.typeahead').typeahead({
name: 'jsonpExample',
remote: {
// ...
dataType: 'jsonp'
}
});
您会发现typeahead现在将执行JSONP请求。
<强>更新强>
回答你的第二个问题。作者的目标是支持JSONP - 总的来说它确实有效 - 但它在当前版本的某些边缘情况下无法正常工作。
例如,如果您需要使用“回调”之外的查询来触发JSONP请求,那么您将陷入困境。在这种情况或类似情况下,您有两种选择:
1)Patch typeahead.js自己让JSONP正常工作。回调名称问题,例如can be fixed by a simple solution
2)等待v0.10在暴露完整的jQuery AJAX对象时被释放。不幸的是,它已经过了承诺的交付日期一个月,并且没有迹象表明它将在未来几周内完成
答案 1 :(得分:2)
使用0.10.5,它可以在远程服务器上运行。除了C Blanchard的回答,我在jsonp
中需要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()
});