0

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

Sinatra 应用程序:

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

任何见解都会受到赞赏!

4

2 回答 2

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的问题。

于 2012-11-07T13:50:57.463 回答
0

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

于 2012-11-07T10:32:46.943 回答