2016-03-15 2 views
0

После успешного выполнения запроса ajax и сохранения данных в базе данных у меня проблема, когда я пытаюсь удалить active класс от кнопки. На клике я показываю spinner, и когда ajax заканчивается, я хочу удалить класс active. При запуске Spinner начинайте, но никогда не останавливайтесь. Я пытаюсь отладить его с alert() внутри success, и я получаю сообщение. Что может быть проблемой?jQuery ajax не удалять счетчик при успешном завершении

submiteComment: function() { 

     $("body").on("click", '.submit-comment', function(e) { 

      e.preventDefault(); 

      var post_id = $(this).data('post'); 
      var comment_text = $(".comment_text"); 

      if($.trim(comment_text).length) { 

       $(this).addClass('active'); 

       $.ajax({ 
        type: "post", 
        url: baseurl + '/comment/create', 
        data: {'post': post_id, 'comment_text': comment_text.val()}, 
        success: function() { 
         $(this).removeClass('active'); 
         alert("Success"); 
        } 
       }) 
      } 
     }); 
    }, 

И HTML:

<button type="submit" class="btn btn-xs btn-default submit-comment has-spinner" data-post="<?= $post->post_id;?>"> 
     <span class="spinner"><i class="fa fa-spinner fa-spin"></i></span> 
     Comment 
</button> 
+0

Я не думаю, что он должен работать с $ (это) в ajax call success part. –

+0

Не могли бы вы дать кнопке ID, а затем попробовать $ («# id»). RemoveClass («active»); ? – BnMcG

+0

Если вы сначала прочитали код, а commnet u увидите класс .submit-comment', а также u увидит '$ (" body "). On (" click ", '.submit-comment', function (e)' ... Так что 'this' является этой кнопкой, например, я говорю:« Запрос успешно выполнен » – Ivan

ответ

2

Вы уверены, что this в $(this).removeClass('active'); равно ваш DOM элемента, когда ваш код выполняется? Похоже, что вам нужно переписать часть кода, как

success: (function() { 
        $(this).removeClass('active'); 
        alert("Success"); 
       }).bind(this) 
+0

Да, его работа, когда я добавляю 'bind (this)'. Спасибо @Vasyl – Ivan

1

вы можете присвоить $ (это) как вар вне Аякса как

var $this = $(this); 
$this.addClass('active'); 

       $.ajax({ 
        type: "post", 
        url: baseurl + '/comment/create', 
        data: {'post': post_id, 'comment_text': comment_text.val()}, 
        success: function() { 
         $this.removeClass('active'); 
         alert("Success"); 
        } 
       })