2012-11-07 80 views
0

我正在尝试使用jQuery登录到Sinatra应用程序,但由于某种原因,Sinatra似乎无法识别它,下面是我的代码以查看用户是否已登录:Sinatra无法识别会话的JavaScript

西纳特拉应用:

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); 
}); 

任何见解都将被认可!

+0

您是否尝试过使用'ajax'函数设置的成功函数部分?即'成功:函数(味精){'?像这里的代码一样:http://api.jquery.com/jQuery.ajax/#callback-functions – iain

回答

1

如果你能提供更多的细节,这将是一件好事。 (浏览器,按时间顺序请求日志包括HTTP状态代码,甚至从Wireshark的转储),但这里是我的猜测:

var r = $.ajax({ 
    cache: false, 
    type: "GET", 
    url: "/logged_in", 
    success: function(msg) { 
    console.log(msg); 
    } 
}); 

一些浏览器缓存积极AJAX请求,尤其是GET请求。所以你可能想尝试cache: false。后来添加成功功能对我来说似乎很奇怪,我从来没有在任何代码中看到过。

编辑:服务器是否在同一个域上回答AJAX请求? (域必须与浏览器测试中的相同。)通常,不需要在URL中指定域,因此我在代码中将其删除。因此,毕竟这可能是由于Same Origin Policy造成的问题。

+0

它不在同一个域中,但我在服务器中设置了正确的“Access-Control-Allow-Origin”方头。这仍然是问题吗? – Zen

+0

别担心 - 这是因为跨域cookie。我应该意识到这一点。 – Zen

0

我会把我的赌注放在这是一个jQuery问题,而不是一个Sinatra问题。检查cookie是否正在发送ajax请求。 cookie没有被发送的原因有很多。