2013-04-03 4 views
3

Я борюсь с чем-то.PHP и jQuery ajax вызов без ожидания ответа

У меня есть страница PHP, которая выполняет вызов ajax на другую страницу, используя jQuery $.ajax. Он отправляет запрос async на страницу обработки, которая затем возвращает ответ.

Теперь это работает нормально, но мы вносим некоторые изменения в бэкэнд, а обработка (хранимая в SQL-процедуре), которая выполняется, теперь занимает намного больше времени, например, более 5 минут. Ожидание - это хорошо, потому что мы имеем дело с 200-миллиметровыми записями в SQL.

Дело в том, что мне нужно отправить запрос на страницу обработки и не ждать ответа. Перерабатывающая страница выстреливает хранимую процедуру в PHP, как это:

  $query = $dbh2->prepare('exec sp_name :countID'); 
      $query->bindParam('countID', $countID); 
      $query->execute(); 

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

Я пытаюсь выяснить способ, которым я могу позвонить на страницу обработки, и он запускает хранимую процедуру и другой код, но браузеру пользователя не нужно ждать ответа. Прямо сейчас, если попытка скопировать страницу слишком скоро, она в основном блокирует браузер некоторое время и не завершает обработку.

Любое понимание этого было бы замечательным.

Заранее благодарим за любую помощь.

+1

возможно использовать http://php.net/manual/en/fun ction.exec.php и затем выполнить файл на сервере с ним и вернуть «ok» в браузер. –

+0

Я думаю, что вам нужны асинхронные вызовы PHP? [Http://stackoverflow.com/questions/124462/asynchronous-php-calls] – Borik

ответ

0

Возможно, вы захотите установить опцию timeout для метода $.ajax(). Установив тайм-аут, возможно, полсекунды или что-то еще, ajax просто перейдет в режим ожидания и перейдет в обработчик ошибок (если есть).

+1

Спасибо за помощь. Я попытался установить тайм-аут в запросе $ .ajax(), и он выполняет тайм-аут и отключает обработчик ошибок, но браузер все еще блокируется, пока процесс не завершится. Любые другие идеи по этому поводу? – Sequenzia

2

Sequenzia, если я правильно понимаю, то я был здесь и нашел путь через эту болото после много исследований.

Я предоставил ответ на аналогичный вопрос несколько месяцев назад. К сожалению, OP и никто еще не принимал/не прокомментировал/не поставил/downvoted - nada.

А вот некоторые полезные ссылки:

Запуск фонового сценария (команда Unix)

Как составить PHP $ shortopts и $ longopts

Это способ интерпретировать параметры, передаваемые в PHP скрипт при запуске из командной строки или из другой PHP скрипт с оболочечной Exec()

Смежные вопросы