我不知道搜索解决方案的正确术语。请建议一个策略,将php输出分解成小块,并逐步传递给ajax的responseText。
该项目是一个ajax网页,它接受一个文本字符串(lastname)并将其传递给php程序。 php代码使用姓氏并随机提取3个具有不同名字的人,并将其放入数组中。完成后,php代码将联系外部服务器以检索与每个名称相关联的信息,并将信息输出到网页的div。从外部服务器获取数据的过程非常缓慢。
此代码基本完成,但整个过程需要很长时间才能在屏幕上生成输出。有没有办法(策略)立即输出php代码的每一步而不必等待完整的代码?
我的伪PHP代码是这样的:
<?
get 3 names; //output this immediately
foreach name { get phone number }
?>
或者,我可以获得一个名字和电话#,并在转到下一个名字之前立即输出。
是否有php或ajax代码/功能/策略可以实现这一目标?请提供解决方案或搜索关键字。
添加/编辑:
感谢您的建议。在父ajax调用之后是否可以执行另一个ajax调用?我最初去了那条路,但我对嵌套js / ajax调用的测试不起作用。这可能是由于语法错误,请查看代码。
aaax调用XHR.responseText的testajax.php(或testajax.html)文件中的测试代码是
<div id="name" >JAM <div id="numa" >
<br />
<br />text holder >>
<script type="text/javascript">
var pid=document.getElementById("numa").parentNode.id;
alert (pid);
document.getElementById('numa').innerHTML += 'append text>> ';
document.write(' docwrite');
</script>
</div>
</div>
<br />
<br />ending text
如果我直接查看文件testajax.php(或testajax.html),我会看到
JAM
text holder >> (an alert window) append text>> docwrite
ending text
但如果我对testajax.php文件进行ajax调用,我只会看到
JAM
text holder >>
ending text
在{ajax调用
之后,<script> </script>
标记内的代码不会运行
有人可以解释一下,并提供修复吗?
TIA
答案 0 :(得分:0)
不知道实际代码和基于代码的答案很难。但是,这是一个想法。
获得三个名称后,将其返回页面并显示它们。然后,对于每个人,在不同的AJAX呼叫中,拨打电话信息。我不是肯定的,如果javascript将使所有三个呼叫彼此独立,但这至少会显示所有3个名称,然后每个电话信息一次一个。
修改
工作流:
答案 1 :(得分:0)
理论上,是的,您可以调用flush()
(并根据需要ob_flush()
)以确保从PHP发送输出。
但是,Web服务器可能会在PHP范围之外添加自己的缓冲(最常见的情况是,如果在Apache上使用mod_deflate);并且你必须小心划分你的响应块,这样它们就不会被浏览器读取,直到一个块完成。
在任何情况下,并非所有浏览器都可以从responseText
读取XMLHttpRequest
,直到请求完全完成。因此,要使其适用于所有客户端,您必须尝试不同的机制,例如包含旧版HTML-iframe的多个 - <script>
。
总结:这是一堆麻烦,也许不值得。更简单的部署可能性是对每个名称的单独AJAX请求。