0

我正在使用 admin-ajax.php 来响应来自 JavaScript 的请求。

当我收集到我想要的数据并返回我的响应时,我还需要将一些数据发送到外部 API 并向用户发送电子邮件。这两件事都需要一点时间。

我希望我可以做这样的事情,它会在触发操作之前通过 AJAX 返回 JSON 响应,这样它们基本上可以在用户返回响应后在后台发生:

function my_ajax_action() {
       //process the $_REQUEST ajax data here
       echo json_encode($results);

       do_action('request_successful', $results);

       wp_die();
}

...但它显然在等待完成之前的操作(因为 PHP 不是异步的)并且 AJAX 请求在提供响应之前不会完成。

是否有任何已知的方法可以将这些操作推迟到完全发送响应之后?附加到这些操作的两个函数不需要传递响应,只是在用户浏览器中显示结果所需的时间增加了几秒钟。

我猜我可以将它们存储在一个 cron 作业中,然后很快就会发生,但我觉得很可能有人已经以更好的方式解决了这个问题。

谢谢亚伦

4

1 回答 1

0

它可能与 PHP 会话锁定有关,如果您已经有一个使用会话数据的脚本,那么稍后还将请求会话数据访问的脚本将被搁置,直到初始脚本完成。阅读更多如何避免它: http: //konrness.com/php5/how-to-prevent-blocking-php-requests/

于 2017-02-16T19:44:27.583 回答