2013-03-30 78 views
0

我真的不知道如何問這是我在這裏問它的原因。所以,如果我使用像這樣的代碼:

$.post("/data/something.php", {stuff: 'hi'}, function(data){ 
$('#box').html(data); 
}); 

一般來說,如果你有PHP這樣你只能得到1個結果:

<?php echo $_REQUEST['stuff'] ?> 

我想知道是否有任何方式的PHP送數據位,那麼越到後來沒有那麼一點點只是將所有的這一次像這樣:

<?php 
echo 'Foo'; 
//Do stuff that takes time 
echo 'Bah'; 
?> 
+0

多少時間? –

+2

如果您希望頁面更新兩次,那麼您最好的辦法是在您的Javascript中調用兩個單獨的'.post()'調用。 – Aiias

+0

你想完成什麼? – bruchowski

回答

0

有2種方式來做到這一點。

第一次使用flush命令(http://php.net/manual/en/function.flush.php)的標準工作流程。這意味着你可以這樣做:

echo "Starting...\n" 
flush(); 
// do long task 
echo "Done!\n" 

但是,這往往是行不通的。例如,如果您的服務器使用deflate,那麼在請求完成之前,Starting可能不會被髮送。許多其他因素也會導致這種情況(代理,瀏覽器行爲)。

更好的選擇是使用輪詢機制。您的主腳本會將其進程寫入文件(帶有一些與會話ID相關的文件名),然後在完成時刪除該文件。然後,您將添加第二個腳本來報告此文件中的進度(或者,如果該文件已被刪除,則結束),並且您的JavaScript將向此檢查腳本(可能每隔一兩秒)發送一個AJAX請求。

+0

啊,寫一個文件我從來沒有想到過,謝謝這有助於。 – lemondrop

0

在PHP

<?php 
    echo 'Foo'; 
    echo '||||'; 
    echo 'Bah'; 
?> 

在Javascript中

var responses = data.split('||||'); 

//you will get 
//Foo in responses[0] 
//Bar in responses[1] 
0

我想到的是PHP已經沒有問題這樣做(通過@戴夫的詳細說明)。在複雜的部分,是Javascript檢索數據的第一部分,傳輸完成之前...

我想你問的是在這裏找到答案:Is it possible for an AJAX request to be read before the response is complete?

做到這一點是這樣的通過監聽xhr對象中的readyState。當readyState == 3時,表示新內容已經到達,您可以訪問它。這項技術被稱爲彗星。

和...

所以最後,是有可能的,沒有它是不容易的。

+0

我不知道我同意這是*彗星*。長期投票,但不是彗星。 –