【问题标题】:Sinatra not recognising javascript for sessionSinatra 无法识别会话的 javascript
【发布时间】:2012-11-07 22:00:32
【问题描述】:

我正在尝试使用 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);
});

任何见解都会受到赞赏!

【问题讨论】:

标签: javascript jquery ruby ajax sinatra


【解决方案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 造成的问题。

【讨论】:

  • 它不在同一个域中,但我在服务器端标头中设置了正确的Access-Control-Allow-Origin。这仍然是问题吗?
  • 别担心 - 这是因为跨域 cookie。我应该意识到这一点。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-03
    • 1970-01-01
    • 2018-02-16
    • 2013-10-17
    • 2011-06-09
    • 2012-10-11
    相关资源
    最近更新 更多