2013-04-16 2 views
0

Я подсчитываю клики по ссылке, вызывая страницу с AJAX, но в Firefox, по-видимому, потому, что вызываемая страница никогда не загружается, по какой-то причине Firefox ее никогда не вызывает. Кажется, что нажата ссылка, а затем Firefox вызывает вызов AJAX, но почему-то, потому что страница изменяется на фактическую ссылку в href, тогда вызов AJAX никогда не отправляется (отображается красным в firebug и никаких признаков этого в Fiddler). Он отлично работает в IE & Chrome, и если я изменю ссылку на target = "_ new", то он будет работать в Firefox. Я делаю какую-то глупую ошибку?Проблема Ajax в 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> 
+1

Почему у вас есть 'return true?' В вашем обработчике кликов? Это заставит браузер следовать ссылке, тем самым убив ваш запрос AJAX. Измените это, чтобы «вернуть false», и перенаправление в обратном вызове. –

+0

@RocketHazmat, но пользователь никогда не попадает на эту страницу. Это останавливает выгрузку и делает так, что запрос счетчика проходит, но также нарушает связь. – Halcyon

+1

@FritsvanCampen: вы можете перенаправить их на ссылку в обратном вызове AJAX :) –

ответ

0

Изменение страницы перед выполнением запроса ajax. Вы должны дождаться завершения запроса ajax до смены страницы, запустив его синхронно:

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

Этот ответ исправил это. Означает ли это, что браузер не будет перемещаться в oage в href до тех пор, пока этот вызов не будет завершен? Спасибо за помощь. – Jonno

+0

Да точно, браузер будет ждать – Damien

4

При загрузке новой страницы любые открытые запросы AJAX будут отменены (в браузере). Вероятно, ваш сервер никогда не видит запрос количества кликов.

Либо всегда открывайте ссылки в новом окне, либо используйте какой-либо другой механизм для подсчета кликов, например, прокси/перенаправление.

+0

Раньше я использовал перенаправления, но они были заглушены ботами, это был единственный единственный способ, который я мог придумать, чтобы получить какой-то точный счетчик кликов. – Jonno

Смежные вопросы