Я использую admin-ajax.php для ответа на запросы из JavaScript.
Когда я собрал необходимые данные и возвратил свой ответ, мне также нужно отправить некоторые данные во внешний API и отправить электронное письмо пользователю. Обе эти вещи занимают немного времени.
Я надеялся, что смогу сделать что-то вроде этого, которое вернет JSON-ответ через AJAX перед тем, как отключить действия, чтобы они могли по существу происходить в фоновом режиме после того, как ответ вернулся с пользователем:
function my_ajax_action() {
//process the $_REQUEST ajax data here
echo json_encode($results);
do_action('request_successful', $results);
wp_die();
}
…но он, очевидно, ожидает завершения действий, прежде чем он умрет (так как PHP не асинхронен), и запрос AJAX не завершится, пока не будет получен ответ.
Существуют ли какие-либо известные способы отложить эти действия до тех пор, пока ответ не будет полностью отправлен? Две функции, прикрепленные к этим действиям, не требуются для доставки ответа и просто добавляют пару секунд к количеству времени, которое требуется для отображения результатов в браузере пользователя.
Я предполагаю, что мог бы хранить их в работе cron, чтобы это произошло очень скоро, но я чувствую, что, вероятно, кто-то уже решил эту проблему лучше.
Спасибо
Аарон
это может быть связано с блокировкой сеанса PHP, и если у вас уже есть сценарий, использующий данные сеанса, то более поздний сценарий, который также будет запрашивать доступ к данным сеанса, будет отложен до завершения начального сценария. Узнайте больше, как этого избежать: http://konrness.com/php5/how-to-prevent-blocking-php-requests/
Других решений пока нет …