2013-10-31 40 views
0

在我的網站上,http://bitalarm.com,我試圖通過API將Bitstamp價格與Javascript中的請求集成到客戶端。我已經收到此錯誤:跨域AJAX不起作用,即使使用通配符

XMLHttpRequest cannot load http://www.bitstamp.net/api/ticker/. Origin http://bitalarm.com is not allowed by Access-Control-Allow-Origin. 

我改變了我的頭在運行比特幣報警,訪問控制允許來源設置爲通配符西納特拉應用。我知道這是因爲捲曲而設置的:

$curl -I http://bitalarm.com 
HTTP/1.1 200 OK 
Content-Type: text/html;charset=utf-8 
Access-Control-Allow-Origin: * 
Content-Length: 2253 
X-Xss-Protection: 1; mode=block 
X-Content-Type-Options: nosniff 
X-Frame-Options: SAMEORIGIN 
Vary: Accept-Encoding 
Server: WEBrick/1.3.1 (Ruby/2.0.0/2013-08-29) 
Date: Thu, 31 Oct 2013 01:39:08 GMT 
Connection: Keep-Alive 

不幸的是,我仍然得到錯誤。我是否應該更改標題的其他部分以使其起作用?

這是訪問該API的JavaScript。這只是一個使用jQuery的GET請求。

url: 'http://www.bitstamp.net/api/ticker/', 

getPrice: function(callback){ 
    $.get(app.api.bitstamp.url, function(data){ 
    callback({ 
     value: data.data.last_local.value, 
     display: data.data.last_local.display 
    }); 
}); 
+1

你可以顯示你正在發出ajax請求的JavaScript嗎? –

+0

我更新了帖子。 – drewblaisdell

回答

1

API網站(www.bitstamp.net)沒有Access-Control-Allow-Origin標頭集。

您提供的CURL示例是向您的網站提出的請求;請求給bitstamp網站,而實際捲曲請求bitstamp顯示了一些稍有不同:

$ curl -I http://www.bitstamp.net/api/ticker/ 
HTTP/1.1 302 Found 
Date: Thu, 31 Oct 2013 01:58:04 GMT 
Server: Apache 
Location: https://www.bitstamp.net:443/api/ticker/ 
Connection: close 
Content-Type: text/html; charset=iso-8859-1 
Set-Cookie: incap_ses_156_99025=nashNbLsX1Eg32pAgDkqAiy5cVIAAAAAz1umCC4nKSJlj6EdKqS70w==; path=/; Domain=.bitstamp.net 
Set-Cookie: visid_incap_99025=A7ePN/kMSnWVCoZjb2CgRSu5cVIAAAAAQUIPAAAAAABYCnOINrGBVtDw+Rx+PQs1; expires=Fri, 30 Oct 2015 08:44:52 GMT; path=/; Domain=.bitstamp.net 
X-Iinfo: 11-97249264-97249266 NNNY CT(123 -1 0) RT(1383184683823 1) q(0 0 1 1) r(2 2) U6 
X-CDN: Incapsula 

注意,有沒有Access-Control-Allow-Origin這裏設置,這意味着瀏覽器將不允許我們將向您的請求。

我假設您無權訪問bitstamp.net服務器,在這種情況下,您需要使用服務器端代理通過ajax獲取數據。我從你的示例CURL請求中猜測你的服務器端代碼是用Ruby編寫的,so this Ruby example may be helpful towards implementing such a proxy