2009-11-27 173 views
1

我在我們的內部系統中有一個報告,可以返回從1天數據到全年的任何地方。因此,報告可能需要0.5秒或超過45秒才能生成所有內容。在發送下一個請求之前取消ajax請求? (jQuery)

報告,可以修改一堆過濾器,所有這些修改時,火了一個Ajax請求非常簡單:

var ax = $.ajax({ 
    type: "GET", 
    url: "/blah", 
    data: values, 
    success: function(data) { .. } 
}); 

現在,當我們精彩的用戶指出:「哦,等等,我想問題就來了這是從2月份開始,而不是1月份!「。但是,自從1月份以來,一個請求已經發生了很多數據!因此,用戶將日期選項切換到二月份,我可以看到Javascript控制檯發出第二個請求。現在我們有兩個去,這是一個比賽!

/報告/?START_DATE =一月(仍在載入中...)

/報告/?START_DATE =月(嘿嘿,現在我在這裏呢!)

然後通常較小的一個將加載更快,但隨後另一個負載和它過寫一個他們已經有了..嗯:)

我使用ax.abort()放在ax變量提及的聲明後,已經嘗試編輯here但它似乎並沒有工作。

所以現在我想知道,我錯過了什麼?我只想在用戶更改某些選項時立即終止當前請求(客戶端,我知道我無法在服務器端執行任何操作),因此我沒有同時發送2個或更多請求。設置async: false不是一個選項,因爲它只是鎖定用戶。

在此先感謝您的幫助。

回答

1

您可以查看ajaxmanager插件。

+0

看起來很容易使用,謝謝。會試試這個 – Bartek 2009-11-28 00:33:19

+0

這個成果很好。感謝您的參考 – Bartek 2009-11-28 16:02:40

3

我認爲試圖放棄先前的請求並不是一個好的解決方案。也許你應該使用簡單的解決方法 - 對於每個Ajax請求在javascript中增加計數器,並將其傳遞給ajax回調。當發生回調時,檢查響應計數器是否與當前計數器值相同。如果不是,則忽略響應 - 它是由過時的點擊事件觸發的。

+0

嘿,不是一個不好的解決方案。很簡單,但很好奇它將如何在應用程序中工作。將不得不明天嘗試 – Bartek 2009-11-28 00:31:41

+0

好主意!將嘗試在我的一個實施 – 2009-11-30 10:13:04