Sinatra无法识别会话的javascript
我正在尝试使用jQuery登录Sinatra应用程序,但Sinatra似乎根本无法识别它,因为某些原因,下面是我的代码,以查看用户是否登录: Sinatra应用程序:Sinatra无法识别会话的javascript,javascript,jquery,ruby,ajax,sinatra,Javascript,Jquery,Ruby,Ajax,Sinatra,我正在尝试使用jQuery登录Sinatra应用程序,但Sinatra似乎根本无法识别它,因为某些原因,下面是我的代码,以查看用户是否登录: Sinatra应用程序: get '/logged_in' do if session[:logged_in] == true status 200 "OK" else status 200 "False" end end 当我在浏览器中浏览到/logged_in
get '/logged_in' do
if session[:logged_in] == true
status 200
"OK"
else
status 200
"False"
end
end
当我在浏览器中浏览到/logged_in
时,我会看到OK
,但当我执行以下Javascript时,控制台会打印出False
,这对我来说似乎很奇怪
var r = $.ajax({
type: "GET",
url: "http://xxx-xxx.com/logged_in"
});
r.success(function(msg) {
console.log(msg);
});
任何洞察都将被告知 我打赌这是jQuery问题,而不是Sinatra问题。检查是否正在为ajax请求发送cookie。无法发送cookie的原因有很多。如果您能提供更多详细信息,那就更好了。(浏览器、按时间顺序排列的请求日志,包括HTTP状态代码,甚至是wireshark的转储文件。)但我猜:
var r = $.ajax({
cache: false,
type: "GET",
url: "/logged_in",
success: function(msg) {
console.log(msg);
}
});
一些浏览器积极缓存AJAX请求,特别是GET请求。因此,您可能需要尝试缓存:false
。后来添加success函数对我来说也很奇怪,我从未在任何代码中看到过
编辑:服务器是否在同一个域上响应AJAX请求?(域必须与浏览器测试中的域相同。)通常不需要在URL中指定域,因此我在这里的代码中删除了它。因此,毕竟这可能是一个问题,因为。您是否尝试过将success函数作为
ajax
函数设置的一部分?i、 e.success:function(msg){
?就像这里的代码:它不在同一个域上,但我在服务器端头中设置了正确的访问控制允许源代码。这可能仍然是问题所在吗?别担心-这是因为跨域cookies。我应该意识到这一点。