2010-12-17 38 views
2

我要尋找一個解決方案,使PHP頁面將加載在它的所有其他信息說的內容/圖像如有然後做一個動作的動作,其將需要一些時間來完成並顯示其結果。我想PHP頁面與其他信息第一次加載&然後做

由於操作需要很長時間,PHP頁面加載速度太慢。我希望我的客戶先看到頁面,然後執行最後顯示結果的操作。

我試圖與ob_start()&平齊(),但沒有成功。 它可能需要Javascript來啓動我認爲如此的操作。但我怎麼能這樣做。

+0

一樣始終。在'onLoad'中。 – 2010-12-17 20:22:23

+0

您的意思是用JavaScript。請指定 – 2010-12-17 20:23:49

+1

是的,Javascript(AJAX)是這種功能的常用選項。我可以推薦查看jQuery。與自己編寫Ajax相比,這使得Ajax變得更容易。 – 2010-12-17 20:32:16

回答

0

您需要加載沒有「慢速呼叫」的頁面。在onload事件中或在網頁末尾的腳本中,執行XHR呼叫到服務器以獲取慢速數據。默認情況下該調用是異步的,因此用戶可以在等待呼叫返回的同時與網頁進行交互。在這一點上,您將獲取數據並使用JavaScript將其轉換爲HTML。

+0

你可以給一些鏈接,做相同的引用。以便我可以理解工作並在我的工作 – 2010-12-17 20:29:30

1

這是一個PHP的操作?由於php是一種服務器端語言,它在用戶收到http響應之前執行。所以你必須先建立網站。將其發送給用戶。比對需要執行操作的腳本發出新的請求(例如使用ajax)。這是應執行的訂單代碼。

  • PHP(Serverside集團):建立自己的網站,執行 主要的PHP代碼
  • HTML(客戶方):HTML是建立,圖像和Java腳本文件被加載
  • 使用Javascript(客戶方):創建新的httprequest(異步)與您的操作的PHP文件。由於操作時間長了,請注意超時。根據需要設置自定義超時時間。
  • PHP(Serverside集團)執行長opperation並返回結果(請確保您的PHP服務器不會超時,認爲默認是對於大多數服務器30秒)
  • 使用Javascript(客戶方):做一些事情的結果ajax處理程序。

一些handly鏈接。

Ajax tutorial of w3schools
jQuery ajax api with examples

-1

你的onload使用,在很短的時間控制定時事件。這將讓屏幕畫出來。

當事件觸發時,使用AJAX技術啓動您的漫長過程。

您無法長時間嘗試在服務器上運行進程。經過一段時間(通常爲300秒),一個失控計時器將殺死你的服務器線程。爲避免這種情況,您的漫長過程必須使用輪詢技術,或者不在正常的Web服務器環境下運行。

如果要超過20秒或30秒運行,然後保存某種形式的會話狀態,並返回一個「工作」的答覆。在關閉下一個週期之前,使用回覆更新用戶的進度。這會加載並定位自己的會話數據,並且運行很短的時間。

警告 - php會仔細地串行化會話數據的所有訪問權限,所以當服務器處理一個循環時,用戶發送的任何內容都將等待該循環結束,然後才能處理。

1

jQuery讓這非常容易,因爲這樣...

<script type="text/javascript" src="jquery-1.4.4.min.js"></script> <!-- Put this in your web page's head --> 
<script type="text/javascript"> 
$(function() { 
    $('wherever-you-need-the-resulting-html-to-go').html('<img src="loading-image.gif" alt="Loading" />'); 
    $.ajax({ 
     url: 'wherever-your-slow-code-is.php', 
     success: function(msg) { 
      $('wherever-you-need-the-resulting-html-to-go').html(msg); 
      } 
     }); 
    }); 
</script> 
+0

將你的慢速功能放在一個單獨的php文件中。上面的ajax調用將輪詢該函數,然後一旦處理完成,將數據插入到您想要的位置。 – 65Fbef05 2010-12-17 20:41:51

+0

這確實假設客戶端具有JavaScript,因此不像從初始PHP頁面進行內聯處理那樣可靠。對於固體代碼示例,仍然爲+1。 – zanlok 2010-12-17 21:21:11

+0

你不能讓你的多部分頁面加載並吃掉它嗎?哈哈! – 65Fbef05 2010-12-17 21:41:25

相關問題