Ситуация:
Пользователь заходит на страницу с быстрой загрузкой, которая делает асинхронный запрос AJAX для какого-то медленного PHP-скрипта, который загружается, например, в течение 30 секунд.
Через 3 секунды пользователь нажимает какую-то ссылку, чтобы перейти на другую страницу с быстрой загрузкой, но браузер ждет 27 секунд, чтобы завершить запрос AJAX для замедления сценария, и только после этого начинает загружаться следующая страница.
Как вы можете решить эту проблему? Как указать веб-серверу прервать обработку запроса, начатого с определенного вызова AJAX?
PS. abort () не является решением
PPS. Пример кода: моя страница содержит фильтр товаров магазина, который загружается дольше, чем другие компоненты страницы. После первой загрузки фильтр кэшируется — в следующий раз он загружается быстро. Поэтому, когда страница загружается, я не показываю фильтр, но добавляю JS, который снова вызывает текущую страницу, используя AJAX, добавляя некоторый параметр (SHOW_FILTER). Если страница получает этот параметр — он показывает фильтр …
<div id="catalog_filter_container">
<?if($_REQUEST['SHOW_FILTER'] == "Y"):?>
... filter code here ...
<?endif;?>
</div>
<?if($_REQUEST['SHOW_FILTER'] != "Y"):?>
<script type="text/javascript">
$(document).ready(function(){
$.ajax({
url: "<?=$APPLICATION->GetCurPageParam("SHOW_FILTER=Y", array("SHOW_FILTER")); // get cur URL with adding param SHOW_FILTER=Y ?>"})
.done(function(html) {
$("#catalog_filter_container").append($(html).find('#catalog_filter_container'));
});
});
</script>
<?endif;?>
Если я вас правильно понимаю, не обязательно иметь ajax-вызов, потому что страница все равно перезагружается. Это похоже на то, что вы можете делать только на стороне сервера (с сеансами).
Примерно так: (Если вы хотите добиться, это сохранить значение для фильтра, когда фильтр не установлен, и отобразить значение из фильтра, когда он установлен)
<?php
session_start();
?>
<div id="catalog_filter_container">
<?if($_REQUEST['SHOW_FILTER'] == "Y") {
$_SESSION['filter_content'] = 'bla bla bla';
}
else {
echo $_SESSION['filter_content'];
}
?>
</div>
Попробуйте использовать задание cron для запуска запросов отдельно от загрузок страниц и кэширования результатов на сервере. Затем ваш AJAX-запрос вернет кэшированный контент.