5

Typeahead.js是来自 Twitter 的一个非常流行的自动建议库。

我刚刚安装,它似乎不支持通过 JSONP 的跨域请求。我收到有关不允许远程来源的错误。

我已经用谷歌搜索了,我找不到任何相关的东西。

任何人都可以确认是否支持此功能。

4

2 回答 2

5

关于您的第一个问题,根据您的错误消息判断,您可能没有正确实现它,因为 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 发布。不幸的是,它比承诺的交货日期晚了一个月,没有迹象表明它将在未来几周内完成

于 2013-09-12T13:39:22.137 回答
2

使用 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()
});
于 2015-01-21T21:09:01.563 回答