PageUp
@PageUp
Default

Как избежать рекурсии при попытке обновлять страницу с помощью AJAX?

Есть следующий скрипт.
Он должен обновлять ВСЮ страницу, но не перезагружая ее в браузере.

<script src="../themes/jquery-3.6.3.min.js"></script>
</head><body>
		<script>
			$(document).on("click", "a", function(evt) {
				evt.preventDefault();

				var redirect_url = $(this).attr('href');
				$.ajax({
					url: redirect_url,
					cache: false,
					dataType: 'html',
					async: false,
					success: function(responce) {
						// Если доступен API истории  
						if (!(typeof history.pushState === 'undefined')) {
							history.pushState({
									url: redirect_url,
									title: document.title
								},
								document.title,
								redirect_url
							);
						}

						$('#content').html(responce);
					},
					error: function(jqXHR, textStatus, errorThrown) {
						console.log(jqXHR, textStatus, errorThrown);
					}
				});
				return false; //что бы не выполнять переход дефолтный
			});
		</script>
<div id="content">
......
</div>


Но как это прописать? Везде примеры только с DIV элементом внутри которого происходит обновление.
Я DIV поместил в страницу после скрипта и подключения jquery
Но что происходит: с каждой новой открытой страницей начинает происходить рекурсия
То есть загружается Index, затем внешние подключения библиотек и срабатывание скрипта.
Снова загружается Index, затем внешние подключения библиотек и срабатывание скрипта.
И таким образом, при каждой новом обновлении по ссылке количество одинаковых запросов растет. Как будто страница вызывает сама себя из DIV элемента. И затем это происходит снова.
Я даже отключил асинхронное обновление, не помогло.
Как сделать так что бы просто обновлялась страница и все GET запросы срабатывали всего 1 раз?
  • Вопрос задан
  • 158 просмотров
Решения вопроса 1
@risejs
Используйте .load() вместо $.ajax(), там можно загрузить часть страницы:
$("#result").load("ajax/test.html #container");
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы