2012-05-12 30 views
0

大家好,我編寫代碼跟蹤用戶點擊鏈接並將它們記錄在php頁面上。這是我的代碼.post()工作,但未完成在jquery .click()方法

<!doctype html> 
<html> 
<head> 
    <meta charset="utf-8"> 
    <title>Tracking outgoing links with JavaScript and PHP</title> 
</head> 
<body> 
    <p><a href="test2.html">Test link to Google</a></p> 
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script> 
    <script> 
    $(function() { 
    $('a').click(function() { 
    $.post("get.php", { name: "John" }  
    }); 
    }); 
    </script> 
</body> 
</html> 

它正在工作,頁面get.php被要求但沒有完成。所以數據不能保存。它似乎頁面移動太快

如何解決這個問題。非常感謝

回答

1

導航離開可能終止Ajax請求之前它完全發送。爲避免這種情況,請不要在請求完成之前加載目標頁面:

$('a').click(function(e) { 
    e.preventDefault(); 
    var url = $(this).attr('href'); 
    $.post("get.php", { name: "John" }, function() { 
     location.href = url; 
    }); 
}); 

但是,中間單擊鏈接不會觸發此事件。如果您總是想要解除您的活動,請使用mousedown事件並檢查e.which。如果它是1這是左邊的按鈕,你需要e.preventDefault()並在AJAX請求完成後重定向。如果它是2這是中間的按鈕,你只需要發送AJAX請求,而不需要做其他任何事情 - 無論如何頁面將在新標籤中打開。

$('a').on('click mousedown', function(e) { 
    if(e.which == '3') { 
     return; /* do not handle rightclick */ 
    } 
    else if(e.type == 'click' || e.which == '1') { 
     e.preventDefault(); 
    } 
    var url = $(this).attr('href'); 
    $.post("get.php", { name: "John" }, function() { 
     if(e.type == 'click' || e.which == '1') { 
      location.href = url; 
     } 
    }); 
}); 
+0

太棒了,你是天才。工作:) – bijakas2

+0

是否可以只爲外部鏈接運行? – bijakas2

+0

現在它適用於所有鏈接。要將其限制爲外部鏈接,請使用'$('a [href^=「http://」],a [href^=「https://」],[href^=「//」]') '而不是'$('a')' – ThiefMaster

0
$('a').click(function() { 
    $.post("get.php", { name: "John" }, 
            ^why this comma  
    }); 

你應該做這樣的事情:

$('a').on('click', function(event) { 
    var self = $(this); 
    event.preventDefault(); // stop the navigation of `a` 
    $.post("get.php", { name: "John" },function() { 
     location.href = self.attr('href'); 
    }); 
}); 
+0

sory misstype,我已經糾正了這個問題。 – bijakas2

0

試試這個:

$(function() { 
    $('a').click(function() { 
     var shouldFollowAnchor = false; 

     $.ajaxSetup.async = false; 

     $.post("get.php", { name: "John" }, function() { 
      shouldFollowAnchor = true; 
     }); 

     return shouldFollowAnchor; 
    }); 
}); 

原因跳轉到該頁面是怎麼一回事,因爲當你點擊鏈接時,數據發佈,您導航到該鏈接的錨的href屬性元件。 您通過返回false來停止關注該鏈接。 這個例子腳本等待服務器的響應 - 是的,你可以添加一些驗證,如果你喜歡 - ,同時你可以顯示一些「加載...」或發送「發送...」消息,用戶將喜歡知道發生了什麼事。 =)

相關問題