我在Rails應用程序中遇到了一個間歇性問題,我無法弄清楚發生了什麼。當用戶登錄時,他們會看到一個儀表板,其中包含一些對操作執行AJAX調用的JavaScript代碼。有時候,用戶登錄時不是看到儀表板,而是從操作中而不是儀表板(在Chrome中)看到JSON響應文本,或者下載.json文件(Firefox)。它是間歇性的,通常不會發生,但它確實發生時真的很煩人。瀏覽器有時會顯示JSON文本而不是所需的頁面
下面是一些代碼的簡單化版本:在模板頭運行
JS:
$(function() {
var remoteLink = $('#remoteLink');
remoteLink.live("ajax:complete", function() {
setTimeout(function() {
loadCount();
}, 30000);
});
loadCount();
function loadCount() {
remoteLink.click();
}
});
而且在模板中的鏈接:
<%= link_to 'get count (hidden)', {:controller => 'something', :action => 'count'},
:id => 'remoteLink', :class => 'hidden', :remote => true, 'data-type' => 'json' %>
而且控制器動作:
def count
render :json => get_counts_function_returning_a_hash
end
我的直覺是它是一種競爭條件 - 可能與使用setTimeout有關? - 但我無法驗證預感。任何人都可以告訴我這裏可能會發生什麼?我也在其他網站上看到過這種情況 - 也是間歇性的,一般不會發生,但是當它發生時很煩人。
哦,非常有趣。我們沒有專門使用store_location,但我們有自己的類似實現。如果這是正在發生的事情,我會調查並接受這個答案。 – Jeff 2011-04-16 05:48:33
你贏了!那是我的問題。我記錄了AJAX請求URL並在登錄後將用戶轉發給它。如果用戶在JS仍在輪詢服務器時註銷,並且用戶返回到登錄頁面而沒有單擊應用程序中的任何其他鏈接,則會發生此問題。 – Jeff 2011-04-16 06:37:30