【问题标题】:Can typeahead.js make cross domain requests?typeahead.js 可以进行跨域请求吗?
【发布时间】:2015-01-22 05:09:01
【问题描述】:

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

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

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

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

【问题讨论】:

  • Typeahead 本身不能“支持”/否决同源策略/访问控制允许源问题 - 这完全取决于浏览器。如果您希望将跨域请求作为预输入的源,那么您必须像在任何其他上下文中处理该挑战一样处理此问题。

标签: twitter-bootstrap jsonp typeahead


【解决方案1】:

关于您的第一个问题,从您的错误消息来看,您可能没有正确实现它,因为 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 正常工作。回调名称问题,例如can be fixed by a simple solution

2) 当完整的 jQuery AJAX 对象暴露时,等待 v0.10 发布。不幸的是,它比承诺的交货日期晚了一个月,没有迹象表明它会在未来几周内完成

【讨论】:

    【解决方案2】:

    使用 0.10.5,它可以在远程服务器上运行。除了 C Blanchard 的回答之外,我还需要 ajax 中的 jsonp 属性。

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

    【讨论】:

      猜你喜欢
      • 2016-07-07
      • 2012-08-21
      • 2011-10-28
      • 1970-01-01
      • 2017-07-18
      • 2013-07-26
      • 2015-10-13
      • 2012-12-18
      • 1970-01-01
      相关资源
      最近更新 更多