typeahead.js可以进行跨域请求吗?

时间:2013-08-29 17:11:11

标签: twitter-bootstrap jsonp typeahead

Typeahead.js是来自Twitter的一个非常受欢迎的自助提供库。

我刚刚安装,它似乎不支持通过JSONP的跨域请求。 我得到了关于远程起源的错误。

我用Google搜索了一下,但找不到与之相关的任何内容。

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

2 个答案:

答案 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()
});