2012-01-30 65 views
4

我有一個大型的「補充」數據表,它是在頁面加載時從大量ajax請求中填充的。這些請求可能需要1分鐘才能完成。在加載此數據時,用戶可以在調用其他Ajax請求的頁面上執行操作。我遇到的問題是調用附加ajax請求的用戶操作在隊列中的所有其他ajax請求都處理完畢之前未完成。這是由於使用了所有同域瀏覽器連接和jQuery ajax隊列。jQuery AJAX隊列優先

不幸的是,更改子域不是一個選項,也不是設置同步隊列以便不使用所有相同的域連接。

我想要的是一個選項來「優先」請求,首先放置用戶請求。

有沒有簡單的方法來完成這與jQuery的ajax隊列?

編輯:

如果沒有管理請求隊列的方式(因爲它開始出現),可以在$就功能回調beforeSend被用於「延遲」的排隊的請求?

+1

我認爲你遇到的限制是瀏覽器限制,與jquery無關,除了jquery爲你發起請求。你可能會改用一些其他的Ajax請求來減少它們需要執行的數量到一個更小的數量嗎? – 2012-01-30 16:27:29

+0

最後,我創建了一個全局對象,它維護對所有ajax請求的引用。然後我重寫了我的ajax請求,如果我想取消並重新啓動它們,那麼它會更加寬容一些。這意味着如果事務完成了100%,就會跟蹤元素本身。最後,在我的用戶發起的操作中,我呼籲停止所有當前和未決的Ajax請求,併發出用戶啓動的操作。然後我重新啓動所有其他的Ajax請求。因爲我跟蹤了以前請求的完成狀態,所以我可以跳過已經完成的請求。 – 2012-08-02 12:20:29

回答

2

一旦發出請求,就由服務器來處理它。由於它是異步的,因此您無法控制何時收到響應以及按何種順序。服務器甚至沒有真正意識到其他請求正在等待同一個會話......您可能可以改變這一點,但是在Web服務器如何管理請求方面需要相當多的工作。

您真正可以做的唯一事情就是阻止用戶進行交互,直到所有數據加載完畢。

+0

這很有道理,我猜我在考慮jQuery處理請求,而不是瀏覽器。 – 2012-01-30 16:53:49

+0

jQuery只是瀏覽器內置AJAX處理程序的包裝。 – 2012-01-30 16:58:53