2013-01-18 129 views
2

一個DIV有一個div:我如何動態內容加載到使用JQuery

<div id="content"></div> 

,並加載頁面時我稱之爲​​。這個負載需要大約10分鐘才能完成,並且在執行期間,它的PHP文件會返回一些信息,告訴執行狀態,如Linux加載。我想要動態地將這個信息放在div #content內,但​​只在執行結束時才放入。有人可以幫我做這個嗎?

的​​電話:

$("#content").load("/admin/ajax/analyse.php"); 
+3

當粘貼相同的網址到瀏覽器窗口,它需要10分鐘? –

+0

@Diodeus,是的,它有點沉重 –

+1

然後在客戶端沒有什麼可以解決這個問題。您需要重新考慮服務器端代碼的工作方式。 –

回答

3

jQuery的ajax接口不提供獲取響應進度更新的方法(儘管它聲稱是瀏覽器的本機對象的超集)。 Apparantly,such a use case is inconceivable to the jQuery developers:但是提供

沒有onreadystatechange機制,因爲successerrorcompletestatusCode覆蓋所有可以想象的需求。

通過直接使用一個XMLHttpRequest,您可以讀取一個onreadystatechange事件處理程序的響應的當前進度:

var xhr = new XMLHttpRequest(); 
xhr.open("GET", "/admin/ajax/analyse.php", true); 
xhr.onreadystatechange = function receiveUpdate(e) { 
    $("#content").html(this.responseText); 
} 
xhr.send(); 

這在大多數的瀏覽器包括IE 10,Chrome瀏覽器的最新版本,和Firefox。

演示:

+0

部分工作,大約4分鐘後停止接收有關執行狀態的信息。你知道這是什麼嗎? –

+0

@MarcioSimao - 適用於我:http://jumpingfishes.com/progresstest2.htm。它可能是你的服務器?如果長時間沒有從您的服務器發送任何內容,則在此期間您將不會收到任何更新。 – gilly3

+0

非常感謝!我將分析正在發生的事情,也許可以是服務器配置。無論如何,非常感謝! –

0

這只是一個想法,你就必須衝出......

在服務器上,

  1. 用戶點擊URL#1,
  2. 一個會話,如果有ISN開始已經沒有人了。
  3. 啓動一個生成數據的異步進程。
  4. 因爲它獲取了一部分數據,它就會排隊等候。更簡單地說,它將數據分塊存放在某個地方。可能是內存中緩存的數據庫。
  5. 當所有數據都由異步任務生成時,它會通過使用某個魔術字符串發送文件結束指示。

在服務器上也:

  1. 同一用戶點擊URL#2(你從會話信息知道)
  2. 你給他的數據塊從隊列的前面。
  3. 每次他點擊URL#2時,都會給他更多的數據。
  4. 當瀏覽器最後一次請求並且剩下的所有內容都是文件結束指示時,服務器可以返回一些HTTP結果代碼,指示沒有更多數據,或者它可以返回魔術字符串。

在客戶端,

  1. 做對URL#1你的Ajax請求啓動服務器生成。
  2. 反覆發出針對URL#2的請求。
  3. 每個結果都會附加到頁面元素上,以便用戶在到達時可以看到它。
  4. 當客戶端請求返回'沒有更多數據'結果代碼(或神奇的文件結束字符串)時,它通過在屏幕上放置顯示所有數據的東西來退出向用戶請求更多數據和信號在那兒。

這應該適合你。