我正在寫一個小腳本來捕獲鏈接點擊並將鏈接的URL保存到數據庫表中,以便跟蹤特定頁面上每個鏈接點擊的次數。鏈接指向外部網站。AJAX Post被重定向取消
因此,我在JavaScript函數中捕獲click事件,使用jQuery發佈到PHP頁面,該頁面將數據保存在MySQL中,然後JavaScript函數將用戶重定向到他們單擊的鏈接的URL。
我遇到的問題是,好像帖子永遠不會完成,因爲重定向。我已經通過調用post回調中的重定向來解決這個問題,但是這會增加幾秒鐘的延遲,因爲直到帖子完成後它纔會被調用。我正在尋找一種方法來發布數據並立即重定向用戶,無論帖子是否成功或失敗。
這是解決方法的當前代碼。它工作正常,但將延遲:
function trackClicks(event)
{
var clicked = $(this).attr('href');
$.post
(
$('#track-click-post-url').attr('value'),
{
action: 'track_landing_page_clicks',
clicked_url: clicked,
nonce: $('#track-click-nonce').attr('value')
},
function(response)
{
window.location = clicked;
}
);
event.preventDefault();
}
這是我想要做什麼,但是當我嘗試它從來沒有完成:
function trackClicks(event)
{
var clicked = $(this).attr('href');
$.post
(
$('#track-click-post-url').attr('value'),
{
action: 'track_landing_page_clicks',
clicked_url: clicked,
nonce: $('#track-click-nonce').attr('value')
}
);
window.location = clicked;
event.preventDefault();
}
+1 for readyState,但服務器是否會繼續處理請求,即使您要離開頁面? – 2011-06-09 21:17:56
@Rocket,它在服務器發送標題和狀態碼後觸發。在執行SQL操作之前,確實可以發送標頭和狀態碼,但除非他特意這麼做,否則假設服務器在請求開始響應時完成服務可能是安全的(否則它會如何知道它需要扔500等)。 – Robert 2011-06-09 21:25:18
啊,好的。聽起來像這樣可能會奏效。 – 2011-06-09 21:37:31