2012-08-04 46 views
1

因此,我開發了一個Spotify應用程序,試圖讓它與我的本地Rails應用程序API交談。當我嘗試它時,我無法獲得除req.status 0以外的任何內容。Rails響應跨域請求在本地開發,Spotify應用程序開發

我認爲它或者是spotify manifest.json文件的一個問題,不允許port:3000在您設置的url上訪問所需的權限,但它也在其文檔中說明以下內容。

https://developer.spotify.com/technologies/apps/tutorial/

如果您需要跟外部網絡API歡迎您,只要您通過整合規範設置遵守規則。請注意,在與Web API交談時,請求將來自原始sp:// $ APPNAME(如我們的示例中的sp://教程) - 確保您正在交談的服務接受來自此類來源的請求。

所以,如果林不知道鐵軌被設置爲不允許這樣的事情,或者如果它與將端口設置成所需要的權限的問題,但我的要求

var req = new XMLHttpRequest(); 
    req.open("GET", "http://127.0.0.1:3000/api/spotify/track/1.json", true); 
    console.log(req); 
    req.onreadystatechange = function() { 

    console.log(req.status); 
    console.log(req.readyState); 
    if (req.readyState == 4) { 
    if (req.status == 200) { 
     console.log("Search complete!"); 
     console.log(req.responseText); 
    } 
    } 
}; 

req.send(); 

總是返回狀態0,例如:

var req = new XMLHttpRequest(); 
req.open("GET", "http://ws.audioscrobbler.com/2.0/?method=geo.getevents&location=" + city + "&api_key=YOUR_KEY_HERE", true); 

req.onreadystatechange = function() { 

    console.log(req.status); 

    if (req.readyState == 4) { 
     console.log(req);   
     if (req.status == 200) { 
      console.log("Search complete!"); 
      console.log(req.responseText); 
     } 
    } 
}; 

req.send(); 

至少會返回403響應。它的請求沒有被製作或者什麼?

任何人有任何想法可能會發生什麼?

非常感謝!

+0

檢查您的導軌應用是否在您的日誌中被點擊 – 2012-08-04 02:06:51

+0

只是爲了說清楚,請求來自哪裏? '127.0.0.1:3000'只能從您的本地機器接受! – 2012-08-04 02:10:54

+0

你好,它來自Spotify應用程序本身,我有我自己的Spotify應用程序的小控制檯,只要我可以告訴它在我的本地機器上下文中運行。 - 我只是試着打我的一個活的網站的主頁,看看我是否可以得到除了空白的迴應以外的任何東西,而我不能,得到同樣的東西。所以我想這可能是一個服務器設置或什麼的? Hrmmmm。 – thrice801 2012-08-04 02:23:37

回答

2

說話時,從Spotify應用外部服務,即使他們在本地機器上運行,你需要確保兩件事情是在正確的地方:

  • 的URL(或至少主機)位於清單的RequiredPermissions部分。端口無關緊要。 http://127.0.0.1應該適合您的情況。

  • 服務器允許sp://your-app-id來源請求,如您在問題中粘貼的文檔中所述。這是通過在服務的HTTP響應中設置Access-Control-Allow-Origin標頭完成的。人們通常將其設置爲Access-Control-Allow-Origin: *以允許任何內容向其服務提出請求。

1

感謝您的幫助,我想通了,我認爲這是多重的東西,用一個主林不試圖更早

首先,我必須跑在端口軌白癡時刻80,很明顯,如果Im從127.0.0.1:3000訪問我的網站,那麼如果spotify應用程序請求127.0.0.1,則不起作用,除非我可以直接在瀏覽器中加載它,除非您在80上運行,否則不能這樣做。通過

rvmsudo rails server -p 80 

需要使用rvmsudo,因爲更改端口需要許可附件。

接下來,我必須設置訪問控制允許原點,如上所述,這可以通過在過濾器添加到您的應用程序控制器之前在rails 3中完成,如下所示。

class ApplicationController < ActionController::Base 

    logger.info "I SEE REQUEST" 

    before_filter :cor 

    def cor 
    headers["Access-Control-Allow-Origin"] = "*" 
    headers["Access-Control-Allow-Methods"] = %w{GET POST PUT DELETE}.join(",") 
    headers["Access-Control-Allow-Headers"] = %w{Origin Accept Content-Type X-Requested-With X-CSRF-Token}.join(",") 
    head(:ok) if request.request_method == "OPTIONS" 
    end 
end 

最後,也是最重要的(嘆氣),你不能只是righclick並重新加載您的Spotify應用,當你改變你的清單文件,退出完全Spotify和重新啓動!