2014-01-29 177 views
0

我正在使用Rails腳本響應ajax調用。我點擊一個按鈕,ajax被調用,並且一組項目被響應並被添加到頁面中。多次提交Rails異步ajax請求

如果我快速點擊按鈕(比如10次),將會呈現10個響應集。但是,在我的日誌中,我只會看到6個帖子(或7個,取決於我點擊的速度),相同數量的數據庫條目以及相同數量的呈現。在Chrome中,我在網絡工具標籤上也只有6個帖子。

如果我將jquery調用設置爲async:false(我知道這很糟糕?),我似乎沒有任何問題。

我在開發中使用Unicorn,如果這有所作爲。

任何人都可以告訴我這裏發生了什麼(以及如何修復它)?如果沒有回覆,帖子回覆如何呈現?這是UJS競賽狀態嗎?

回答

0

在我讀的時候,我懷疑是這樣的;您async: false實驗似乎證實了它(不管它是正確的則是另一回事):


服務器

我揣你Ajax請求被服務器

我不節流不知道這將是怎麼回事,而是你發送10個請求的想法;只有有6/7調用初始化,意味着不是所有的請求都通過


讓阿賈克斯

之所以async: false是壞,是因爲它凍結您的瀏覽器,直到同步請求被處理

這意味着如果您每次發送一個請求,您的服務器將能夠處理它&相應地返回數據。顯然,這將是壞UX如果你這樣做,但這是另一個故事


建議

就個人而言,我認爲這個問題可能是您的獨角獸cannot handle concurrent connections設置,或者類似的東西。雖然Unicorn can handle concurrency,也許你在開發中的設置只給了它1個工人或什麼?

基本上,如果您的服務器一次只響應1個請求,您的問題就會有意義。這意味着你的「錯過」阿賈克斯響應只會在獨角獸太忙而無法處理請求時丟失。

+0

我有2名員工設置了獨角獸,可以設置更多。我想我的主要問題是爲什麼即使在服務器似乎沒有被髮送和接收的情況下,響應也被呈現?即我得到10個'項目集'添加到我的列表,即使根據我的日誌和Chrome只有7個職位是?如果我將日誌條目添加到js.erb文件中,我會得到7個日誌條目,但JavaScript被稱爲10次,這怎麼可能?謝謝 – riley