在回显到 AJAX 回调后执行 PHP


Execute PHP after echo'ing to AJAX callback

让我们有这个ajax调用:

App.prototype.askServer= function(obj) {
    return $.ajax({
        type: "POST",
        dataType: 'json',
        url: 'php/ajax.php',
        data: {
            stuff: obj
        }
    }).success(function(data) {
        console.log(data);
    });
}

而我的ajax.php看起来像这样:

<?php
$stuff = $_POST['stuff'];
// execute curl that takes 1 second
echo $response
// parse $response through multiple loops and save into files and databases
// takes 5 seconds
?>

一旦 PHP 脚本echo某些东西,ajax 回调就会执行吗?还是会等待整个 PHP 脚本执行?换句话说:我的 ajax 回调会在 1 秒或 6 秒后执行吗?

我问的原因是因为我从curl那里得到了一个相当大的 JSON。我想将其返回到ajax回调,之后,我想将这些数据分开,将一些东西保存到数据库中,将其他数据保存到JSON文件中,依此类推。这需要一段时间,但客户端没有必要等待。

可以在 PHP 继续执行脚本时提前关闭连接。

您需要在 PHP 脚本中定义ignore_user_abort(true);并在echo $response;后立即调用flush();脚本继续执行,但连接将关闭,从而导致 Ajax 回调执行。

您需要拆分处理。只需注册来自用户的请求,并在以后进行处理。PHP有几种所谓的消息队列或工作线程队列。你可能想看看 RabbitMQ