0

我通过使用 AJAX 但在 Firefox 中调用页面来计算链接的点击次数,显然是因为调用的页面从未实际加载,出于某种原因 Firefox 从未调用它。似乎点击了链接,然后 Firefox 进行了 AJAX 调用,但不知何故,因为页面更改为 href 中的实际链接,然后 AJAX 调用从未真正发送(在 firebug 中显示为红色,在 Fiddler 中没有任何迹象)。它在 IE 和 Chrome 中运行良好,如果我将链接更改为 target="_new",那么它将在 Firefox 中运行。我犯了某种愚蠢的错误吗?

<HTML>
<HEAD>
<script type="text/javascript">
function adtrk(cde){
var ajaxRequest;  // The variable that makes Ajax possible!
    var r=Math.random();
    try{
        // Opera 8.0+, Firefox, Safari
        ajaxRequest = new XMLHttpRequest();
    } catch (e){
        // Internet Explorer Browsers
        try{
            ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try{
                ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e){
                // Something went wrong
                alert("Your browser broke!");
                return false;
            }
        }
    }

    // Create a function that will receive data sent from the server
    ajaxRequest.onreadystatechange = function(){
        if(ajaxRequest.readyState == 4){
            var ajaresp = ajaxRequest.responseText;
        }
    }

    ajaxRequest.open("GET", "/atr.php?cde=" + cde + "&r=" + r, true);
    ajaxRequest.send(null);
}

</script>
</HEAD>
<BODY>
<a onclick="adtrk('zip1'); return true;" href="http://www.google.com"><img src="/images/img.jpg"></a>
</BODY>
</HTML>
4

2 回答 2

4

当您加载新页面时,任何打开的 AJAX 请求都将被取消(由浏览器)。您的服务器可能永远不会看到点击计数请求。

要么总是在新窗口中打开链接,要么使用其他一些机制来计算点击次数,比如代理/重定向。

于 2013-04-16T14:23:09.880 回答
0

在 ajax 请求完成之前页面会发生变化。您应该通过同步运行它来等待您的ajax请求结束,然后再更改页面:

ajaxRequest.open("GET", "/atr.php?cde=" + cde + "&r=" + r, false);
于 2013-04-16T14:32:39.493 回答