PHP脚本在前一次执行结束时等待两次

时间:2017-02-01 14:04:26

标签: php jquery ajax

抱歉,由于我缺乏词汇量,我找不到更好的标题。

我有一个PHP脚本回答2个GET参数:一个用于启动一个长进程,一个用于获取进程进程。

类似的东西:

if(isset($_GET['start_generation'])) exit($dossier->generate());
if(isset($_GET['get_status'])) exit($dossier->getStatus());

按钮正在发送第一个请求(AJAX POST),然后启动一个计时器,该计时器将使用另一个ajax请求每2秒检查一次生成状态。

目前第一个请求在生成完成之前没有结束,所以检查状态的函数将直接从0到100。

如何在调用generate()之前关闭AJAX请求? 你能告诉我输出缓冲(ob_flush()和朋友)是否可行?

由于

修改(我的ajax代码):

var lastStatus = false;
var checkDossierStatus = function(){
    $.get('".$URL."&get_status', function(status){
        status = parseInt(status, 10) || 0;
        console.log('status '+status);
        if(status === lastStatus) return false;
        lastStatus = status;

        var target;
        var activeTitleID = 0;

        switch(status){
            default:
            case 0:
                // Show something for status 0...
                break;

            case 1:
                // Show something for status 1... etc...
                break;
        }

    });
};


$('.transmission-start-btn').off('click').on('click', function(e){
    e.preventDefault();
    $.post('".$URL."', {transmission_action: 'start'}, function(d){
        checkDossierStatus();
        startStatusCheck();
    });
});

2 个答案:

答案 0 :(得分:1)

您可以像这样中止或Cancle ajax请求

222.22.5.5

答案 1 :(得分:0)

对我来说,最好的解决方案是使用带有Connection:Close标头和session_write_close()的输出缓冲。

session_write_close();  # Prevent session locking so AJAX status update request will not hang.
ob_end_clean();
ob_start();
header('Content-Type: text/event-stream');
header('Connection: Close'); # Close the ajax request.
echo 'HEY'; # This will be displayed
$size = ob_get_length();
header('Content-Length: '.$size);
ob_end_flush();
flush();

LongProcess(); # Here a can finally start a long background process
相关问题