2012-11-07 79 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沒有被髮送的原因有很多。