2009-07-20 53 views
3

哇,這個讓我把我的頭髮撕掉。jQuery點擊功能不間斷髮射

我正在跟蹤JQuery中的鏈接。

$(".hdr a[id]").mousedown(function(e){ 
    var h = this; 
    var url = "/g/click/" + this.id; 
    $.get(url); 
    }); 

看來,有時瀏覽器擊敗了ajax調用。新的頁面在點擊跟蹤器被觸發之前加載。 (它的響應時間並不慢,這個請求甚至不會觸及Apache)。這是間歇性的,並不容易重現,但在用戶在網站上做了很多工作後會出現。

我在之前的一個迭代中使用了preventDefault,但是最終打破了cmd-click並且沒有跟蹤右鍵單擊。

有沒有一種方法可以確保運行?

感謝您的幫助。

+0

Jason,請注意使用synchronus xhr調用的含義 – redsquare 2009-07-22 10:52:59

回答

2

聽起來就像當我問我有同樣的問題:$.post() doesn't have time to run?對我來說,解決辦法是添加以下到混合:

$.ajaxSetup({async: false}); 

不再做異步請求意味着我的項目將別人會前完成開始。

+0

我最終這樣做了,似乎已經解決了這個問題。謝謝! – 2009-07-22 10:43:06

1

如果您使用獲取請求,則會緩存響應。爲了緩解緩存問題,您需要確保url是唯一的。您可以通過每次在url中附加一個唯一的虛擬查詢字符串項目來執行此操作,或者更好地使用.ajax方法並指定cache:false。

我不會使用asynch:false,因爲這會鎖定ui,並且如果響應無法返回或被延遲,則用戶最終必須崩潰並且無法解決緩存的問題。

$(".hdr a[id]").mousedown(function(e){ 
    var url = "/g/click/" + this.id; 
    $.ajax({ 
     url: url, 
     cache: false, 
     success: function(data){ 
       //do something with the response 
       } 
     }); 
}); 

N.B 我也可能會嘗試把setTimeout調用到腳本。這將允許您清除超時連續發生的另一個mousedown事件時的超時。 如果用戶重複使用,這將防止大量的xhr請求被髮送。