异步运行PHP脚本

时间:2017-01-25 21:24:24

标签: javascript php jquery ajax

我有一个带有按钮的网页,当用户点击按钮时,会运行一个很长的PHP脚本(比如查看用户购买的过去的令牌),并在脚本结束时向用户发送电子邮件。

我已经抽象了我的代码用于共享目的(仅用睡眠功能替换脚本)。

webpage.php

<div class="card">
    <input type="submit" class="button" name="update" value="Update" />
</div>
<script type = "text/javascript" src="jquery_functions.js"></script>

jquery_functions.js

$(document).ready(function(){

    $('input[name="update"]').click(function() {
        $.post(
                "script.php",
                {update:"fav_tokens"},
                function($data) {
                    alert ($data.message);
                },
                "json"
            );
    });

});

的script.php

<?php
    sleep(60);
?>

问题在于,一旦用户按下按钮,他就会“锁定”在页面上并且无法离开它......哪种方式违背了执行jQuery AJAX的目的。

我尝试将脚本放在另一个文件( script2.php )中,然后在script.php中使用exec("php -f script2.php");调用它,但这也会阻止用户离开页面

我可以做些什么来完成这项工作?

1 个答案:

答案 0 :(得分:0)

可能的问题是script.php正在打开一个会话,而您尝试访问的任何一个页面也在尝试打开一个会话,但必须等到script.php全部设置完毕。

script.php中的某处,您需要添加:

ignore_user_abort(1); // Let the script run even if user leaves the page
set_time_limit(0);    // Let script run forever

session_write_close(); // Close the session. This will allow for other pages to open it
                       // You will still be able to read your session data but can no longer write to it unless it is re-opened

sleep(60);