2013-03-30 37 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

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