我有一個簡單的PHP腳本內的回聲調用屏幕上的打印參數:增加延遲迴音
<body>
<p>the string will appear in 30 seconds:</p>
<p><?php echo $string; ?></p>
</body>
我想的是,「回聲」運行前,該系統將等待X秒。因此,「30秒後出現的字符串」文本將首先出現,30秒後,$字符串將出現在它的下面。如何做到這一點?在加載之前,Sleep()傾向於延遲整個頁面。
我有一個簡單的PHP腳本內的回聲調用屏幕上的打印參數:增加延遲迴音
<body>
<p>the string will appear in 30 seconds:</p>
<p><?php echo $string; ?></p>
</body>
我想的是,「回聲」運行前,該系統將等待X秒。因此,「30秒後出現的字符串」文本將首先出現,30秒後,$字符串將出現在它的下面。如何做到這一點?在加載之前,Sleep()傾向於延遲整個頁面。
你可以使用PHP睡眠等待30秒:
<body>
<p>the string will appear in 30 seconds:</p>
<p><?php sleep(30); echo $string; ?></p>
</body>
但是,當你這樣做,這取決於你的PHP和Apache的設置,整個頁面可能之前充分渲染和發送一個HTTP等待30秒回覆給客戶。
此外,如果您向客戶端發送部分響應,有時可能會等待呈現內容,直到加載足夠的頁面以呈現數據(例如表格的情況)。
嘗試使用JS來代替,以使頁面呈現,然後在30秒後出現隱藏的數據:
<body>
<p>the string will appear in 30 seconds:</p>
<p id="sleep" style="display:none"><?php echo $string; ?></p>
<script>
window.setTimeout(function() {
document.getElementById('sleep').style.display = '';
}, 30000);
</body>
確實,sleep()會延遲整個頁面。第二種方法在某種程度上不起作用,但是當使用JS做類似的事情時,代碼確實出現在X秒之後,但它仍然在我試圖阻止這種情況的HTML源代碼中可見。 – AssafT
您可以使用延遲30秒的AJAX請求從服務器檢索數據並將其顯示在頁面上。退房https://api.jquery.com/load/ –
它沒有工作,因爲我有30毫秒的超時。已更新至30000,其按預期工作。 –
你可以嘗試的解決方法,這種情況下使用Javascript。 jQuery庫非常乾淨和實用。你應該嘗試一下:
HTML
<body>
<p>the string will appear in 30 seconds:</p>
<p id="string" hidden="hidden"><?php echo $string; ?></p>
</body>
JS
$(document).ready(function() {
$("#string").delay(30000).show();
});
重要提示:由於JavaScript是一種客戶端語言,這種解決方案只是 「拖延」 了$ string在客戶端設備中回顯,但自服務器開始以來,無論如何接收到變量$ string ...如果有一些「不耐煩和黑客易「的客戶端,只是查看您的頁面的源代碼將做的伎倆... :(
服務器端替代:如果提出的解決方法是無效的爲您的應用程序(因爲我不知道它的安全需求),我會嘗試,例如用另一種服務器端方法檢查。下面是基本步驟:
保存時間戳與(例如,在會話cookie)所述客戶端的信息一起在服務器上的初始請求的。
然後,不要直接從服務器發送$ string,只需將其保留爲空即可。
使用JS,延遲30秒後再向服務器(例如通過AJAX)詢問$ string。這個AJAX調用將在初始請求後的30秒後觸發,服務器現在可以檢查會話cookie(包含有關客戶端和時間戳的信息)。
如果(current_timestamp() - cookie_timestamp()> = 30)==>服務器返回$ string或在其他情況下不返回任何內容。
祝你好運;)
TNX ...我決定做一個服務器端解決方案。所有JS方法隱藏字符串,但它出現在html源文件中。 – AssafT
確保您的輸出不會被緩衝。 – Musa
,看起來它會更好地實現使用JavaScript? – Stu
然後你應該使用Javascript進行異步任務。 –