vlady_32
@vlady_32
Начинающий IT-специалист

Почему посылается большое количество запросов от AJAX?

Столкнулся со следующей проблемой. Имеется страничка с меню и областью с динамическим контентом. При нажатии на пункт меню в области подгружается через ajax другая страничка.

После первого нажатия на ссылку в меню отправляется один запрос на сервер через ajax, после второго нажатия на пункт меню посылается уже два запроса на сервер и т.д. То есть после каждого нажатия на пункт меню кол-во запросов удваивается. И после 10 кликов на пункт меню сервер начинает очень сильно тупить.

Не понимаю почему так происходит, подскажите, в чем может быть проблема? Ниже представлены фото

Код ссылки, по которой происходит отправка запроса на сервер:
<p><a class="links view">Просмотр справочника</a></p>

Код ajax для отправки запроса на сервер:
$(".view").click(function() {
		console.log("ajax view");
		$.ajax({  
			type: "POST",
	        url: "actionController",
	        data: {command: 'view', start: '0'},
	        success: function(html){ 
	        	$("#workplace").html(html);
	        }
	    });
	});

Лог консоля:
fb5680f91c6e42f2956b360c0b3205b0.JPG

Обновлено:
Код ajax: https://jsfiddle.net/Vlady_32/uo7o375s/

Код java (сервлет, обработчик команды): https://jsfiddle.net/Vlady_32/jhm9gzf1/
Пришлось вставлять java код в html, js, css. Извиняюсь.
  • Вопрос задан
  • 556 просмотров
Решения вопроса 1
alsopub
@alsopub
Возможно вы несколько раз исполняете приведенный код, тем самым добавляете одинаковые обработчики.
Надо смотреть более полный код, а так же то что вы загружаете через ajax - может там тоже javascript есть.
Ну или у вас грузится еще один div class="view" в существующий div class="view" и click срабатывает на каждом.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
iCoderXXI
@iCoderXXI
React.JS/FrontEnd engineer
Попробуй preventDefault() и stopPropagation()

Я бы не стал использовать ссылки, переназначая на них обработчики событий. Не смотря на то, что это весьма распространенная практика, лично у меня она вызывает диссонанс. Это все равно что купить гусеничный трактор, отрезать ему гусеницы, приделать колёса и так на нем рассекать, радуясь своей изобретательности... :)

В приведенном коде явного криминала не увидел, хотя сам подход мне кажется сомнительным... Объясню свою позицию с точки зрения рацио и здравого смысла - HTML сгенеренный на сервере дорог. Нынче модно с сервера получать JSON, и шаблонизацию прогонять client-side. Это на порядок экономичнее, стало быть та же самая шелесяка в датацентре выдержит на порядок больше нагрузку...

А если еще типовые повторяющиеся вещи кешировать...
Ответ написан
Комментировать
SecurityCodeNAS
@SecurityCodeNAS
Попробуйте проверить так
$(".view").off().click(function() {
console.log("ajax view");
$.ajax({
type: "POST",
url: "actionController",
data: {command: 'view', start: '0'},
success: function(html){
$("#workplace").html(html);
}
});
});
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы