我正在从客户端Sinatra测试用于连接到MongoHQ和检索文档的Sammy.js。但是,我在使用Sammy.js检索它时遇到了问题。我的代码看起来像这样:
this.get('#/', function(context) {
this.load('http://localhost:4567/test.json', { cache: false })
.then(function(items) {
context.items = items;
})
.partial('templates/index.ms');
});XMLHttpRequest无法加载。Access-Control-Allow-Origin不允许原始地址http:// localhost。
你有什么建议来解决这个问题吗?
发布于 2013-07-06 16:33:31
我不知道为什么我会问这个问题,为什么仍然没有得到回答。
this.get('#/', function(context) {
context.load('http://...', { dataType: 'jsonp' })
.then(function(items) {
context.items = items;
})
.partial('templates/index.ms');
});只需将数据类型添加到json填充即可。
发布于 2012-12-07 04:26:17
由于跨域资源共享,您的XMLHTTPRequest被阻止。
要了解更多信息,请查看wikipedia article on CORS。
要了解如何在服务器端实现它,请查看enable-cors.org。
不幸的是,他们在enable-cors.org上没有Ruby版本(我现在正在做一个拉取请求),同时你可以在任何基于机架的服务器上使用类似这样的东西:
class CORSController < ActionController::Base
before_filter :cors_preflight_check
after_filter :cors_set_access_control_headers
def cors_set_access_control_headers
headers['Access-Control-Allow-Origin'] = '*'
headers['Access-Control-Allow-Methods'] = 'POST, GET, OPTIONS'
headers['Access-Control-Max-Age'] = "1728000"
end
def cors_preflight_check
if request.method == "OPTIONS"
headers['Access-Control-Allow-Origin'] = '*'
headers['Access-Control-Allow-Methods'] = 'POST, GET, OPTIONS'
headers['Access-Control-Allow-Headers'] = 'X-Requested-With'
headers['Access-Control-Max-Age'] = '1728000'
render :text => '', :content_type => 'text/plain'
end
end
end编辑:
我应该补充的是,任何从CORSController继承的类都将允许CORS请求,如果你想全局使用CORS,你应该将它添加到你的ApplicationController中。
此外,将Access-Control-Allow-Origin设置为通配符也是一个潜在的安全风险。
发布于 2012-12-07 14:03:46
我已经解决了在Apache服务器中设置Passenger Module以从http:// localhost/json/test.json运行的问题。因此,在这种情况下,保持相同的域"localhost“,并且不需要具有类型为Cross Origin的约束...谢谢!:D
我学到的:避免使用WEBrick
https://stackoverflow.com/questions/13750942
复制相似问题