AJAX - 向客户发送答案后完成执行

时间:2017-05-02 09:31:52

标签: php jquery ajax output-buffering

我需要在Apache服务器上生成一个巨大的PDF文件,这实际上需要相当长的时间。这分两步完成:

  1. 检查数据的正确性和可用性 - 我们假设这需要1秒钟。

  2. 从随机资源中收集更多数据,构建并保存庞大的PDF文件。我们假设这需要40秒。

  3. 客户端向服务器发送一个AJAX-Request,并为其提供一些在第一步中检查的数据。请求的代码如下所示 - >

    $.ajax({
        type: "post",
        url: "./FinalPage.php",
        data: { CustomerID: IDInput, Link: LinkInput, ..., ...},
        success: function(Answer) {
            console.log(Answer);
    
            if (Answer == "OK"){
                window.location.reload();
            } else {
                alert("Something Went Wrong: " + Answer);
            }
        }
    })
    

    服务器现在应该开始处理步骤1并检查给定的数据。如果一切正常,服务器会回复“OK” - 如果没有,服务器会向用户发出异常消息。服务器上使用的PHP代码看起来像这样......

    ob_start();
    @ini_set("memory_limit",'500M');
    ignore_user_abort(true);
    set_time_limit(1200);
    header("Content-Encoding: none");
    
    $Message = "OK";
    if (!DataCorrect){
        $Message = "You made a mistake.";
    }
    
    //Let's assume something else happens here
    usleep(2000000);
    
    echo $ErrorMsg;
    header('Connection: close');
    header('Content-Length: '. ob_get_length());
    ob_end_flush();ob_flush();flush();
    if(session_id()){session_write_close();}
    
    //Client should have now recieved "OK" or a failure message - the 40 seconds part begins now.
    
    usleep(40000000);
    echo "DONE";
    

    问题是我实际上希望客户端在一秒钟之后收到“OK” - 消息。现在客户端应该重新加载页面,而php脚本继续执行40秒部分。然而,客户端等待41秒才能收到“OK”然后重新加载 - “DONE”没有出现,但它也会一直等到脚本执行完毕。

    我非常感谢任何帮助以及关于我可能做错的想法 - 提前感谢。顺便说一句:这些都是非常简约的例子,请不要过于严肃地对编码惯例采取行动。

0 个答案:

没有答案