2013-04-16 109 views
0

我通過使用AJAX調用頁面來計算點擊鏈接,但顯然是因爲調用的頁面從未實際加載過,因爲某些原因,Firefox從未調用它。似乎鏈接被點擊,然後Firefox進行AJAX調用,但不知何故,因爲頁面更改爲href中的實際鏈接,所以AJAX調用從未實際發送(在firebug中顯示爲紅色,而在Fiddler中沒有顯示)。它在IE瀏覽器工作正常&鉻,如果我改變鏈接到目標=「_新」,那麼它將在Firefox中工作。我在犯一些愚蠢的錯誤嗎?Firefox中的Ajax問題

<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> 
+1

爲什麼你''返回true;'在你的點擊處理程序?這將使瀏覽器跟隨鏈接,從而殺死你的AJAX請求。將其更改爲'return false;',並在回調中重定向。 –

+0

@RocketHazmat,但用戶永遠不會真的去那個頁面。這會停止卸載,並使得計數請求經過,但它也會中斷鏈接。 – Halcyon

+1

@FritsvanCampen:你可以將它們重定向到AJAX回調中的鏈接:) –

回答

0

頁面在ajax請求完成之前發生更改。你應該等待你的AJAX請求結束之前更改頁面同步運行:

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

這個答案解決了它。這是否意味着在這個調用完成之前瀏覽器不會移動到href中? 感謝您的幫助。 – Jonno

+0

是的,瀏覽器將會等待 – Damien

4

當您加載新頁面時,任何打開的AJAX請求將被取消(通過瀏覽器)。您的服務器可能永遠不會看到點擊計數請求。

要麼在新窗口中始終打開鏈接,要麼使用一些其他機制來計算點擊次數,如代理/重定向。

+0

我以前使用過重定向,但他們被機器人淹沒了,這實際上是我能想到的唯一一種獲得某種準確點擊次數的方法。 – Jonno