У меня проблема с моим приложением, когда ajax-вызов на сервере занимает слишком много времени: он ставит в очередь все остальные запросы от пользователя до тех пор, пока он не будет выполнен на стороне сервера (я понял, что отмена клиентской стороны вызова не имеет никакого эффекта и пользователь еще должен ждать).
Вот мой тестовый пример:
<script type="text/javascript" src="jquery-1.4.1.min.js"></script>
<a href="another-page.php">Go to another page on the same server</a>
<script type="text/javascript">
url = 'http://localserver/some-very-long-complex-query';
$.get(url);
</script>
Таким образом, когда вызывается get, а затем после того, как я нажимаю на ссылку, сервер завершает обслуживание первого вызова, прежде чем перенести меня на другую страницу. Моя проблема в том, что я хочу избежать такого поведения.
Я нахожусь на сервере LAMP и ищу способ сообщить серверу, что пользователь прервал запрос с помощью функции, такой как connection_aborted (), как вы думаете, это путь? Кроме того, я знаю, что самая длинная часть этого сценария PHP - это запрос MySQL, поэтому, даже если я знаю, что connection_aborted () может обнаружить, что пользователь отменил вызов, мне все равно нужно проверить это во время запроса MySQL ... I ' Я не совсем уверен, что PHP может обрабатывать такого рода "события".
Так что, если у вас есть идея получше, я не могу дождаться, чтобы ее услышать.
Спасибо.
Обновление:
После дальнейших исследований я обнаружил, что проблема возникает только с фреймворком Symfony (который я опускал до точного, мой плохой). Кажется, что вызов Ajax блокирует любой другой будущий вызов. Это может быть связано с контроллером или системой маршрутизации, я смотрю на это.
Также для тех, кто заинтересован в проблеме, вот мой новый контрольный пример:
-новый проект с Symfony 1.4.3, конфигурация по умолчанию, я только что создал приложение и модуль по умолчанию.
-jquery 1.4 для ajax-запроса.
Вот мой файл actions.class.php (в моем уникальном модуле):
class defaultActions extends sfActions
{
public function executeIndex(sfWebRequest $request)
{
//Do nothing
}
public function executeNewpage()
{
//Do also nothing
}
public function executeWaitingaction(){
// Wait
sleep(30);
return false;
}
}
Вот мой файл шаблона indexSuccess.php:
<script type="text/javascript" src="jquery-1.4.1.min.js"></script>
<a href="<?php echo url_for('default/newpage');?>">Go to another symfony action</a>
<script type="text/javascript">
url = '<?php echo url_for('default/waitingaction');?>';
$.get(url);
</script>
Для нового шаблона страницы это не очень актуально ... Но с этим я могу воспроизвести проблему блокировки, с которой я столкнулся в моем реальном приложении.
У кого-то еще такая же проблема?
Спасибо.