Задать вопрос
Acuna
@Acuna
Заполнил свой профиль

Почему $.ajax () постепенно зависает?

Приветствую всех!

Клепаю проект в свободное от работы время, но недавно совершенно неожиданно для себя столкнулся со странной проблемой. Ее суть заключается в следующем: на каждой странице сайта имеются ссылки, при переходе по которым контент грузится в определенный блок на сайте аяксом. То есть к ним на onclick подвешен метод с аяксом. Таких ссылок достаточно много, то есть юзеры будут щелкать много и уверенно) Сам код особо ничем не примечателен:

$.ajax ({
	
	method: 'get',
	url: 'ajax.php',
	cache: true,
	data: { mod:mod, id:id, },
	success: function (c) {
		$('#content').html (c);
	},
	
	}).done (function () {
		return false;
	});
	
});


Все работает отлично, но я уже начал готовиться выкинуть его в продакшн, поэтому решил пощелкать все более основательно и с ужасом обнаружил, что с каждым кликом по таким ссылкам контент грузится все более медленно. 3-4 ссылки летают, с 5 наблюдаются уже секундные затыки, а далее браузер (любой) просто люто виснет на минуту. После того, как он отходит, при следующем клике картина повторяется. Помогает только перезагрузка страницы (если, конечно, браузер в данную минуту не висит))) ). Такое ощущение, что он что-то там грузит в кеш, который постепенно переполняется, или пишет что-то в какой-то стек. Скорее всего лучшим решением будет что-то очищать после каждого вызова аякса, вот только что и от чего?)
Уже и кэш аякса включал/отключал, c async игрался, кидал рандомный параметр в url - ничего не помогает. Проц при этом не грузит, память не жрет.

О, и что самое интересное - если пропустить функцию через setInterval (), то она запускает саму себя совершенно без затыков, как и подобает аяксу.

Буду благодарен любой помощи, так как меня уже холодок пробирает: занимался проектом два года, а из-за такой мелочи работа с ним почти невозможна...

Заранее благодарен!
  • Вопрос задан
  • 3874 просмотра
Подписаться 2 Оценить 4 комментария
Ответ пользователя Владимир Куликов К ответам на вопрос (4)
it_proger29
@it_proger29
Битрикс
В моем случае зависания были из-за:
async: false,
После изменений зависания ушли.
function showMyCart(){
    $.ajax({
        async: true,
        type: "POST", 
        url: url_serv+"cart.php", 
        dataType: "text",
        data:{
            'action': 'show',
        },
        error:function(){
            $('#view-cart').html('Ошибка');  
        },           
        beforeSend: function() { 
            $('#view-cart').html('Загрузка');  
        },                
        success: function (result) {  
            $('#view-cart').html(result);    
            $('#view-cart').removeClass('load--after');    
        }
    });
}
Ответ написан
Комментировать