2015-06-26 73 views
1

我有一個PHP頁面,它可以計算頁面加載的一個長過程。 我試圖用js實現一個「等待div」 - 但是頁面仍在等待php計算完成,並且在計算時不顯示加載div。 這裏是我的代碼元素順序:在php頁面中執行加載div不工作

<!DOCTYPE html> 
<html> 
<head> 
     <meta charset="utf-8" /> 
     <title>My site</title> 
     <script src="//code.jquery.com/jquery-1.11.3.min.js"></script> 
<script src="//code.jquery.com/jquery-migrate-1.2.1.min.js"></script> 

     <link rel="stylesheet" type="text/css" href="/css/style.css"> 
    <style> 
     #load_screen{ 
      background: #000; 
      height: 1600px; 
      width: 100%; 
     } 
     #loading{ 
      color: #fff; 
     } 
    </style> 

    </head> 
    <body> 
     <div id="load_screen"> 
      <div id="loading">calculating path</div> 
     </div> 
<?php 


//my php calculation and DB calls 
    ?> 
    <div id="container" class="container"> 
</div> 
<script> 
window.addEventListener("load", function() 
{ 
var load_screen = document.getElementById("load_screen"); 
document.body.removeChild(load_screen); 
}); 
</script> 

有誰知道爲什麼「加載」格現在顯示並等待PHP頁面完全加載?

+0

如何將您的請求從JS發送到PHP? (您的Ajax在哪裏?) –

+1

我認爲在發送給客戶端之前,PHP必須首先由服務器執行。因此,加載HTML加載消息不會有幫助。如果您的代碼需要很長時間才能執行,它會卡在服務器上並在發送到客戶端之前保留在那裏 –

回答

0

這在你的情況下是不可能的。但是,當你使用jQuery時,堅持使用jQuery。替換下面的腳本:

<script> 
window.addEventListener("load", function() 
{ 
var load_screen = document.getElementById("load_screen"); 
document.body.removeChild(load_screen); 
}); 
</script> 

有了:

$(document).ready(function() { 
    $("#load_screen").remove(); 
}); 

以上兩種方法是在頁面加載,而不是對PHP計算來完成。完成時應該有一個觸發器或一個回調,然後附加該事件並刪除加載屏幕。所以說,如果你的PHP計算完成併發送了一個AJAX響應,那麼你可以刪除加載屏幕。

$.get("calculate.php", function (res) { 
    if (res == "ok") 
    $("#load_screen").remove(); 
}); 

我現在假設PHP文件有類似的東西。的calculate.php來源:

<?php 
    sleep(5); 
    die("ok"); 
?> 

雖然使用上述這兩個腳本,PHP具有5秒(顯式)的延遲。 5秒後,負載屏幕將被刪除!