.ajaxStart()
- глобальное событие. При каждом щелчке вы связываете другой набор обработчиков событий, что приводит к отображению двух или более загружаемых изображений. Вы можете попробовать использовать привязку события .one(types, function() { ... })
, чтобы запускать этот блок кода только один раз за клик.
Однако я бы посоветовал рассмотреть обратные вызовы $.ajax()
beforeSend
и complete
как места для привязки кода для конкретного запроса ajax (в отличие от каждого запроса ajax).
Я обычно использую шаблон примерно так:
$(".addToCart").click(function(e){
// you need to use "var" to make sure $this is only available inside this function
var $this=$(this);
// avoid using $ on variables that aren't jQuery objects (this is just a string)
var tableId=$this.closest('table').attr('id');
// insert the element before starting the ajax call
var $loadingElem = $("<img class='loader' src='images/loader.gif'>");
$loadingElem.insertBefore($this);
// call ajax with some data
$.ajax({
url: '...', data: {id: tableId}, // ....
complete: function(xhr, textStatus) {
// remove the element when the ajax completes
$loadingElem.remove();
}
});
});
Кроме того, $($this)
- потерянный вызов, он просто вернет $this