2017-09-15 80 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密鑰暴露給任何訪問過您網站的人,這可能會造成災難性後果。