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

时间:2016-09-12 12:15:16

标签: javascript php ajax

请耐心等待,我会尝试解释我确信其他人面临的问题,但在网络上找不到任何指向解决方案的问题。

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

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

第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 + ")");
            }
      });
   };

2 个答案:

答案 0 :(得分:1)

您可以使用window.onload javascript功能。将所有功能放入其中。这样,只有在页面完全加载完毕后才会执行代码。

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

答案 1 :(得分:1)

  

在PHP脚本完成之后,此页面才会完全呈现

您的选择是:

  • 在执行慢速PHP之前输出HTML。这样做的问题是在显示页面之前你不知道PHP处理的结果。此外,您需要在开始缓慢的工作之前确保flush all buffers。没有特殊功能需要(有一个可以使用的register_shutdown()函数 - 但是它用于其他事情并且在这里完全没有必要)。确保设置了ignore_user_abort()。
  • speed up the PHP内容(10秒表明这里有很多很多的改进范围 - 但是您还没有向我们展示正在运行的任何代码。
  • 显示一个暂停页面,该页面在完成时或在设定的延迟后通过javascript重定向到最终页面。
  • 从第二页中删除慢速PHP代码并将其作为该页面的后续请求调用(确保设置了ignore_user_abort())

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