我真的不知道如何问这个,这就是我在这里问的原因。所以如果我使用这样的代码:
$.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 :(得分:0)
有两种方法可以实现这一目标。
第一个使用flush
命令(http://php.net/manual/en/function.flush.php)的标准工作流程。这意味着你可以这样做:
echo "Starting...\n"
flush();
// do long task
echo "Done!\n"
但是:这通常是行不通的。例如,如果您的服务器使用deflate,则在请求完成之前,Starting
可能不会被发送。许多其他因素也可能导致这种情况(代理,浏览器行为)。
更好的选择是使用轮询机制。您的主脚本会将其进度写入文件(具有一些与会话ID相关的文件名),然后在完成后删除该文件。然后,您将添加第二个脚本来报告此文件中的进度(或者如果文件已被删除则完成),并且您的JavaScript将向此检查器脚本发送AJAX请求(可能每两秒钟一次)。
答案 1 :(得分:0)
在PHP中
<?php
echo 'Foo';
echo '||||';
echo 'Bah';
?>
在Javascript中
var responses = data.split('||||');
//you will get
//Foo in responses[0]
//Bar in responses[1]
答案 2 :(得分:0)
我希望php没有问题(如@Dave所详述)。复杂的部分是javascript在传输完成之前检索数据的第一部分......
我认为您所要求的内容在此处得到解答:Is it possible for an AJAX request to be read before the response is complete?
实现此目的的方法是通过侦听xhr对象中的readyState。当readyState == 3时,表示新内容已到达,您可以访问它。该技术被称为Comet。
和...
所以最后,是的,这是可能的,不是不容易。