2011-06-11 75 views
1

我有一些PHP代碼正在接收和處理大圖像。我想在處理圖像時使用jQuery來更新DOM來在某些點回顯一些JavaScript。這是一些示例代碼,但它不起作用。它只是等待整個5秒鐘,然後使警報重新發生。我希望它立即執行第一次警報,然後在5秒後再次發出警報。使用PHP輸出修改在處理期間發出JavaScript

ob_start(); 

echo '<script type="text/javascript">alert(\'1...\');</script>'; 

ob_flush(); 

sleep(5); 

ob_start(); 

echo '<script type="text/javascript">alert(\'2...\');</script>'; 

ob_flush(); 

任何人都可以幫忙嗎?

+0

根據定義,使用輸出緩衝時,使用輸出緩衝時不能顯示輸出。我錯了嗎? – 2011-06-11 00:08:23

回答

1

大多數瀏覽器會緩存內容,直到達到特定大小。嘗試通過填充某些東西來讓腳本塊變長。

另請參閱:您應該致電flush,而不僅僅是ob_flush和make sure zlib compression is turned off

+0

它們應按以下順序調用:'ob_flush(); flush();' – 2011-06-11 06:21:17

0

添加此到腳本的頂部將工作:

for ($i = 0; $i < ob_get_level(); $i++) { ob_end_flush(); } 
ob_implicit_flush(1); 

據我所知,ob_implicit_flush(1)迫使每個輸出語句沖洗。所以其他ob_start()ob_flush()調用將不是必要的。我不知道這是否適合你。

<?php 

for ($i = 0; $i < ob_get_level(); $i++) { ob_end_flush(); } 
ob_implicit_flush(1); 

echo '<script type="text/javascript">alert(\'1...\');</script>'; 

sleep(5); 

echo '<script type="text/javascript">alert(\'2...\');</script>'; 

?> 
+0

啊,廢話我補充說,它不適合我。我在Firefox 4上。 – 2011-06-11 00:16:54

+0

嘗試不使用'ob_start()'和'ob_flush()'調用(我添加了上面的完整代碼)。我使用的是FF 3.4,對我來說工作正常。如果這不起作用,我想知道我們是否使用不同版本的PHP? – 2011-06-11 00:22:42

+0

是的,我複製並粘貼了關於運氣的代碼。 PHP 5.3.5在這裏。 – 2011-06-11 00:33:47

0

繼FF4工作:

<?php 
echo '<script type="text/javascript">alert("1");</script>'; 
flush(); 
sleep(5); 
echo '<script type="text/javascript">alert("2");</script>'; 
?> 

我實現了一個聊天 「服務器」 的東西,如很久以前。它正在工作。

這個ob_ *對此沒有幫助。

+0

在FF4上沒有這個好運氣。 T___T – 2011-06-11 01:09:20

+0

對我來說,它在FF4中工作。其實我以前用console.log()而不是alert()。也許這是問題?現在我改回了alert()。 – flori 2011-06-11 01:16:43

1

我有一些接收和處理大圖像的PHP代碼。我想在處理圖像時使用jQuery來更新DOM來在某些點回顯一些JavaScript。

這可能超出了你必須完成的範圍,但我會爲此使用AJAX。你當然可以得到你想要發生的事情,但從長遠來看,這種做法並不好。

使用AJAX請求上傳圖片並獲取結果,而不是提交整個頁面並等待它爬行回來。然後客戶端上的定時器可以發出單獨的 AJAX「你做了多少?要求。這兩個PHP實例將通過在數據庫中的作業條目上設置「完成」標誌進行通信等。

雖然它使客戶端的東西更復雜一些,但處理用戶交互(例如因爲允許用戶取消長時間運行的作業)並使您的PHP代碼更加關注更多。