所以我正在开发一个spotify应用程序,试图让它与我的本地rails应用程序API交谈。我尝试的时候除了req.status 0之外什么都得不到。
我认为它要么是spotify manifest.json文件的问题,要么不允许port:3000进入你在所需权限中设置的url,但它在文档中也说了以下内容。
https://developer.spotify.com/technologies/apps/tutorial/
如果您需要与外部网络API通信,只要您遵守“集成指南”中规定的规则,我们欢迎您。请注意,在与Web API交谈时,请求将来自原始sp:// $ APPNAME(因此sp://示例教程) - 确保您正在与之交谈的服务接受来自此类来源的请求。
所以,我不确定rails是否设置为不允许这种事情,或者是否将端口置于所需权限中的问题,但是我的请求
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 :(得分:2)
当与Spotify应用程序中的外部服务交谈时,即使它们在本地计算机上运行,您也需要确保正确地准备好两件事:
网址(或至少是主机)位于您的清单的RequiredPermissions
部分。港口没关系。 http://127.0.0.1
对你的情况应该没问题。
服务器允许sp://your-app-id
来源请求,如您在问题中粘贴的文档中所述。这可以通过在服务的HTTP响应中设置Access-Control-Allow-Origin
标头来完成。人们经常将其设置为Access-Control-Allow-Origin: *
以允许任何内容向其服务提出请求。
答案 1 :(得分:1)
感谢您的帮助,我弄明白了,我认为这是多方面的事情,其中一个主要因素是我以前没有尝试过的白痴时刻
首先,我必须在端口80上运行rails,显然如果我从127.0.0.1:3000访问我的网站,如果spotify应用程序请求127.0.0.1则不会起作用,除非我可以直接在浏览器,除非你在80上运行,否则你不能这样做。这是通过
完成的rvmsudo rails server -p 80
需要使用rvmsudo,因为更改端口需要权限。
接下来我必须设置如上所述的访问控制允许来源,这可以通过在过滤器之前添加到您的app控制器中来完成在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
最后,也是最重要的(感叹),当你对清单文件进行更改时,你不能再点击并重新加载你的spotify应用程序,完全退出spotify并重新启动它!