2012-05-13 61 views
2
for($x=0;$x<100000;$x++) { 
    echo "hello $x"; 
} 

因此,通常情況下,它會先完成處理,然後立即打印所有內容。是否有一種方法可以在發送命令時繼續打印郵件,這樣我就能看到一個新的hello $x,或者我必須使用jQuery/JavaScript?在完成處理之前是否可以在while循環中打印PHP?

更新:

我問,因爲我想運行一個漫長的測試腳本,並經1在瀏覽器上顯示的所有結果1,所以我沒有去檢查日誌,可以只直觀地看到顏色編碼的結果。我試圖做出類似的效果:http://tools.css3.info/selectors-test/test.html如果任何人都可以提供一個簡短的jQuery示例(如果必須這樣做),我將不勝感激。

+0

PHP處理,並輸出發送到Web瀏覽器。您的Web瀏覽器可能會立即渲染它,或者它可能會以大塊的形式渲染它。我建議你使用jQuery執行此。 – Blender

+0

因爲http是請求 - 響應系統,所以我相信只要使用ajax就可以。 –

+0

它會像命令行一樣工作,相當確定嗎? –

回答

3

雖然可以通過控制輸出緩衝區,但我不會那樣做,主要是因爲它會延遲JavaScript DOMReady事件。

如果你正在尋找一個視覺效果,你應該使用JavaScript(但我沒有看到基於你的問題說什麼任何理由阿賈克斯)。它可以用簡單的setInterval完成。考慮到最初爲空<div id="hello">

var i = 0; 
var timer = setInterval(function(){ 
    if(i == 10000) { 
     clearInterval(timer); 
     return; 
    } 
    var div = document.getElementById('hello'); 
    div.innerHTML += 'hello ' + i + '<br>'; 
    i++; 
}, 250); 

我剛纔看到您的編輯,現在我想到你居然要使用Ajax!你鏈接的例子確實如此。基本上,你必須在JavaScript中設置一個測試隊列,每個測試都有一個唯一的URL。然後,這只是一次用Ajax發出一個請求的問題(jQuery和$.get將是最簡單的方法)。下面假設一個<ul>,而不是從我前面的例子中,DIV,並且該服務器會返回一個成功或失敗的消息對每個測試迴應:

var tests = [ 
    'http://example.com/test1', 
    'http://example.com/test2', 
    'http://example.com/test3', 
]; 

function processQueue() { 
    if(tests.length > 0) { 
     var test = tests.shift(); 
     $.get(test, function(response) { 
      $('#some_ul').append('<li>' + response + '</li>'); 
      processQueue(); 
     });  
    } 
} 

processQueue(); 
+1

編輯後我改變了主意,這不僅僅是一種視覺效果。關鍵是,你不只是顯示一個結果之一,你實際上是一個處理它們一個異步。 – bfavaretto

+0

即使在我給出最佳答案之後,我也很欣賞編輯。 – Strawberry

1

是的,如果你禁用輸出緩衝:http://php.net/manual/en/book.outcontrol.php

但作爲@Blender暗示你可能會更好用AJAX做這個(通常使用jQuery做)。

+0

我可以問一下AJAX如何做到這一點? – Strawberry

+0

@Strawberry你究竟想要做什麼?有很多的教程在那裏做用PHP + jQuery的阿賈克斯,看看周圍,如果他們不回答你的問題,請擴展上面你的問題。 –

相關問題