【问题标题】:Expedia API Cross Origin RequestsExpedia API 跨域请求
【发布时间】:2013-09-12 00:08:40
【问题描述】:

我正在使用Expedia API 使用酒店搜索前端。我设置了一个在 localhost:3000 上运行的 node.js 服务器和一个用于输入位置和日期的简单 Backbone 视图。

但是在向 Expedia 提交请求时,我总是得到 ​​p>

XMLHttpRequest cannot load ... http://localhost:3000 is not allowed by Access-Control-Allow-Origin.

这是我的提交代码,应该可以正常工作:

$.support.cors = true; // not really done at every request
var from = this.$el.find( "input[name=date-from_submit]" ).val(),
    to = this.$el.find( "input[name=date-to_submit]" ).val(),
    where = this.ui.place.val();

$.ajax({ 
    "url": "http://api.ean.com/ean-services/rs/hotel/v3/list?" + 
      "destinationString=" + where +
      "&cid=55505" + //test CID
      "&minorRev=20" +  
      "&arrivalDate=" + from + 
      "&departureDate=" + to +
      "&room1=2" + 
      "&apiKey=<apikey>",
    "dataType": "json",
    "accept": "application/json"
}).always( function( a, b, c ) {
    console.debug( a, b, c );
});

我从 JSFiddle 尝试了这段代码,看看他们是否只禁止 localhost,但无济于事。再次出现同源策略错误。

现在我想知道:

  1. Expedia 是否完全支持跨域请求?
  2. 也许我应该在他们网站的某个地方输入我选择的来源?我什么也没找到。
  3. 如果 1. 的答案是“否”,那么开发人员应该如何使用他们的 API 构建产品?
  4. 我只是傻吗?

提前致谢!

【问题讨论】:

  • Expedia API 文档没有提到 CORS 支持,所以我假设他们不支持 CORS。您可以尝试在他们的支持论坛上寻求更多指导:support.ean.com/home 在回答开发人员应该如何构建产品时,您仍然可以使用他们的 API,只是不能在纯 Javascript 中使用它。
  • 感谢您的澄清。当我从节点服务器执行请求时,该请求有效,因此我还必须包含一些服务器逻辑。
  • @prayerslayer 我知道这已经有一段时间了,但你还记得你是如何解决这个问题的吗? Expedia 有没有回复您?
  • @Xander 不,他们没有。一个简单但不理想的解决方案是通过您自己的后端代理 Expedia 请求。

标签: javascript api cors same-origin-policy


【解决方案1】:

使用数据类型:“jsonp”

$.ajax({
cors:true,
dataType:"jsonp",   
url:"API END POINT",
method:"GET",
success:function(data){
    console.log(data);
}

});

【讨论】:

  • 这不起作用。因为 EAN API 不返回 JSONP,所以它返回 JSON。 JSONP 结果是封装在函数调用中的 JSON 结果。所以这永远不会与 Expedia API 一起工作。
  • dataType:jsonp 早些时候可以处理 Expedia AJAX 调用,但最近几天,它停止了工作。
猜你喜欢
  • 2021-07-18
  • 2023-03-21
  • 2015-06-22
  • 2015-01-26
  • 2017-06-15
  • 2017-04-30
相关资源
最近更新 更多