Sinatra没有识别会话的javascript

时间:2012-11-07 05:42:04

标签: javascript jquery ruby ajax sinatra

我正在尝试使用jQuery登录Sinatra应用程序,但Sinatra似乎根本无法识别它,这是我的代码,看看用户是否已登录:

Sinatra app:

get '/logged_in' do
    if session[:logged_in] == true
         status 200
         "OK"
    else
        status 200
        "False"
    end
end

当我在浏览器中浏览/logged_in时,我看到OK,但是当我执行以下Javascript时,我将False打印到控制台 - 对我来说似乎很奇怪。< / p>

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

任何见解都会得到满足!

2 个答案:

答案 0 :(得分: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,这可能是一个问题。

答案 1 :(得分:0)

我会打赌这是一个jQuery问题,而不是Sinatra问题。检查是否正在为ajax请求发送cookie。为什么没有发送cookie会有很多原因。