PHP进程停止页面完全加载和显示

PHP Process Stops Page from Fully Loading and Displaying

本文关键字:加载 显示 进程 PHP      更新时间:2023-09-26

请耐心听我说,我将试着解释这个问题,我相信其他人也遇到过这个问题,但在网上找不到任何解决办法。

Page 1 (PHP Page with Ajax)目的是收集数据并重定向到下一页显示更新页面,即

window.location.replace("Updating.php"); <-- This is Page 2 

Page 2(一个带有少量html和PHP脚本的PHP页面,用于更新服务器数据库)问题是,直到PHP脚本完成之后,这个页面才会完全呈现。因为这个过程可能需要10秒左右的时间,用户会想知道发生了什么,基本上更新页面(第2页)直到脚本完成才呈现,这当然违背了目的。

是否有一个类似于javascript onload <body onload="myFunction()">的函数,可以在脚本开始运行之前呈现页面。我不认为有,但我将欣赏和洞察如何克服这个问题。

感谢

编辑添加请求的AJAX代码

function handleDataCallback(result) {
    var json = eval('(' + result + ')');
    if (json['msg'] != "") {
  //         alert(json['dirID']);
       processUpload(json['dirID']);
 }
};
/*
 * This is called when uploadFile.js is finished.
 * We many need to add an AJAX WaitforID here in case the processUpload takes too long. 
 */
function processUpload(data){
    var dir_name = data;
    $.ajax({
          url: 'processUpload.php',
          type: 'POST',
          data:  {'folderKey' : dir_name },
          success: function(data) {
                '<%Session["dir_id"] = "'+ dir_name + '"; %>';
             //Takes us back to the index file with the directory
            //  window.location.replace("../../index.php?dir_id="+dir_name); 
            window.location.replace("Updating.php"); 
          }
        });
};
/*
 * Obtains the dirID
 */
    function waitForDataID (handleDataCallback) {
    $.ajax({
        type: "GET",
        url: "extractArchives.php",  
        async: true,
        cache : false,
        timeout: 10000, // sets timeout to 30 seconds
        success : handleDataCallback,
        erorr : function  (XMLHttpRequest,textStatus, erorrThrown) {
            alert("erorr :" + textStatus + "(" + erorrThrown + ")");
            }
      });
   };

您可以使用window.onload javascript特性。把你所有的功能都放进去。这样,您的代码将只在页面完全加载完成时执行。

window.onload = function () {
    // Your code here ...
}

此页面在PHP脚本完成之前不会完全呈现

你的选择是:

  • 在执行缓慢的PHP操作之前输出HTML。这样做的问题是,在显示页面之前,您不知道PHP处理的结果。此外,您需要确保在启动慢速程序之前清空所有缓冲区。这里不需要特殊的函数(有一个register_shutdown()函数,可以使用 -但它用于其他事情,在这里完全没有必要)。确保设置了ignore_user_abort()。
  • 加速PHP的东西(10秒表明这里有一个很多改进的范围-但是你没有向我们展示任何正在运行的代码。
  • 显示一个保持页面,在完成或设置延迟后通过javascript重定向到最终页面。
  • 从第二页删除缓慢的PHP代码,并将其作为该页的后续请求调用(确保设置了ignore_user_abort())

请注意,除了实际修复性能问题之外,上述所有选项都会在您的服务器上暴露DOS漏洞。