2017-09-15 97 views
1

我试图使用他们的Javascript API从Sprout Video获得API响应。问题在于我在请求中遇到CORS问题。我可以在Postman中得到回复,但不能在我的网站上。Ajax API调用导致CORS问题

我发现了一堆关于这个问题的问题,但到目前为止还没有找到适合我的方案的工作解决方案。我认为添加标头'Access-Control-Allow-Origin':'*'本应该解决它,但它不。我也尝试将dataType更改为jsonp,这导致了不同的错误,但仍然是错误。

任何人都可以告诉我哪里出错了吗?

$.ajax({ 
     type : 'GET', 
     url : 'https://api.sproutvideo.com/v1/videos/' + videoID, 
     headers: { 
      'SproutVideo-Api-Key':'ae463680265ac2ff7bf6255b3488d0c1', 
      'Access-Control-Allow-Origin':'*', 
      'Access-Control-Allow-Credentials': true, 
     }, 
     dataType: 'json', 
     crossDomain: true, 
     success:function(result) { 
      console.log(result); 
     }, 
     error:function(result) { 
      console.log(result); 
     } 
}); 

Here's a JSFiddle

+3

'Access-Control-Allow-Origin'头部需要位于响应头部,而不是请求头部。我不太了解CORS解决您的问题,但将该标题添加到请求中并不能解决您的问题。 –

+3

据我查看http://sproutvideo.com/docs/api.html上的文档,不支持直接从前端JavaScript代码使用SproutVideo API--特别是试图调用它从jQuery $ .ajax或XHR或Fetch API。在任何情况下从JavaScript代码中调用它的文档中都没有提及。但无论如何,文档中的假设似乎是你从后端代码调用它 - 例如,从后端PHP或Ruby代码 – sideshowbarker

+2

对不起,是的,好像问题是必需的访问控制 - 允许 - 原始响应头不包括在API的* any *响应中,更具体地说,API没有被配置为正确响应CORS预检OPTIONS请求,浏览器自动作为CORS协议的一部分发送。有关详细信息,请参阅https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Preflighted_requests – sideshowbarker

回答

-1

如果您尝试访问受保护的协议与不安全的一个,你会得到这个错误。 如果这是您的问题,请尝试将您的HTTP协议更改为通过托管在安全提供程序上进行保护,或者如果您的项目是基于Node.js,则还可以尝试将其上传到安全服务。让我知道这是否有帮助。

+0

谢谢,但请求和响应都是通过HTTPS发生的,如小提琴中所示。 – user13286

+0

哦,好的。然后我没有对你的问题的具体答案抱歉。但是,如果我记得我添加了某种称为Access-Control-Allow-Origin的chrome扩展,并且我认为这解决了我的问题,给它一个镜头,看看你是否可以得到它的工作,因为我记得我不得不玩弄它来使它工作。 –

0

我相信我们能够通过客户支持来解决这个问题,但SproutVideo API并非设计为使用客户端JavaScript进行访问。 API允许您完全控制您的账户,因此,您的API密钥应该与您的账户密码一样小心。为了在客户端使用API​​,就像您在此尝试的那样,您会将API密钥暴露给任何访问过您网站的人,这可能会造成灾难性后果。