2014-11-13 4 views
-2

Я пытаюсь создать счетчик кликов, который при каждой загрузке увеличивается. Я хочу использовать его без базы данных, это код:Button click counter

<?php 

    $counterFile = 'counter.txt' ; 

    // jQuery ajax request is sent here 
    if (isset($_GET['increase'])) 

    { 
     if (($counter = @file_get_contents($counterFile)) === false) die('Error : file counter does not exist') ; 
       file_put_contents($counterFile,++$counter) ; 
       echo $counter ; 
       return false ; 
      } 

      if (! $counter = @file_get_contents($counterFile)) 
      { 
       if (! $myfile = fopen($counterFile,'w')) 
        die('Unable to create counter file !!') ; 
       chmod($counterFile,0644); 
       file_put_contents($counterFile,0) ; 
      } 

     ?> 
     <script type="text/javascript"> 
      jQuery(document).on('click','a#download',function(){ 
       jQuery('div#counter').html('Loading...') ; 
       var ajax = jQuery.ajax({ 
        method : 'get', 
        url : '/test.php', // Link to this page 
        data : { 'increase' : '1' } 
       }) ; 
       ajax.done(function(data){ 
        jQuery('div#counter').html(data) ; 
       }) ; 
       ajax.fail(function(data){ 
        alert('ajax fail : url of ajax request is not reachable') ; 
       }) ; 
      }) ; 
     </script> 
    <div id="counter"><?php echo $counter ; ?></div> 
    <a href="<?php echo get_field("pdf"); ?>" id="download" onclick="window.open(this.href);return false;">Download btn</a> 

Проблемы заключается в том, что, когда я нажимаю на Download btn Ф открываются, но номер пропадает, и если я перезагрузить страницу всегда остается на 0. Любая идея, где и в чем проблема?

+3

Я помню этот кусок кода. Вы получили это от http://stackoverflow.com/a/26892053/ в своем другом вопросе. Используя этот код, вы должны принять ответ или перенести его. Я запустил этот код orignal, и он не всегда оставался на '0', но фактически увеличивал стоимость. Я действительно помог в этом ответе, чтобы указать на ошибки, но никаких дальнейших комментариев с вашей стороны не было. –

+0

Я не подразумевал, что вы сделали код и назвали его своим. Вы должны были разместить комментарий под ответом человека, чтобы этот человек знал, почему он не работает, вместо того, чтобы публиковать новый вопрос с помощью кода. –

+0

Для начала вам необходимо остановить исходную ссылку. 'return false;' в конце обработчика кликов. –

ответ

3

Перезагрузка идет по ссылке (в конце концов, это ссылка, которая будет перезагрузить страницу).

Либо вернуть ложь:

jQuery(document).on('click','a#download',function(){ 
     ... 
     return false; 
    }); 

Или предотвратить действие по умолчанию с preventDefault()

jQuery(document).on('click','a#download',function(e){ 
     e.preventDefault() 
     ... 
    }); 

Вы используете одновременно onclick= атрибут и обработчик событий JQuery на той же кнопке. Это нехорошая ситуация.

Лучше всего использовать только jQuery для обработчиков. например

jQuery(document).on('click','a#download',function(e){ 
     e.preventDefault() 
     window.open(this.href); 
     ... The other code ... 
    }); 

и удалите onclick="window.open(this.href);return false;" с кнопки.

+0

OP уже возвращает false из атрибута onclick –

+0

@A. Вольф: теперь отметили. Будет ли это не противоречить обработчику jQuery, который также обрабатывает его? –

+0

Я бы сказал, нет, нужно некоторое тестирование. Но ya, лучше было бы установить всю логику внутри того же обработчика –