Firefox中的Ajax问题

时间:2013-04-16 14:22:13

标签: javascript ajax firefox

我通过使用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>

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:0)

页面在ajax请求完成之前更改。您应该在更改页面之前等待ajax请求结束,方法是同步运行:

ajaxRequest.open("GET", "/atr.php?cde=" + cde + "&r=" + r, false);