策略将PHP输出分成较小的输出(ajax,php)(嵌套的ajax调用,ajax中的ajax?)

时间:2010-07-29 00:02:03

标签: php javascript ajax

我不知道搜索解决方案的正确术语。请建议一个策略,将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

2 个答案:

答案 0 :(得分:0)

不知道实际代码和基于代码的答案很难。但是,这是一个想法。

获得三个名称后,将其返回页面并显示它们。然后,对于每个人,在不同的AJAX呼叫中,拨打电话信息。我不是肯定的,如果javascript将使所有三个呼叫彼此独立,但这至少会显示所有3个名称,然后每个电话信息一次一个。


修改

工作流:

  • Javascript通过ajax向php发送名称。
  • PHP将3个名称返回给js
  • js在页面上附加3个div,每个名称都有一个。
  • js向php发出3个请求,每个请求发送1个名称。
  • php返回电话信息/其他任何内容到js
  • js获取信息并将其添加到相应的div

答案 1 :(得分:0)

理论上,是的,您可以调用flush()(并根据需要ob_flush())以确保从PHP发送输出。

但是,Web服务器可能会在PHP范围之外添加自己的缓冲(最常见的情况是,如果在Apache上使用mod_deflate);并且你必须小心划分你的响应块,这样它们就不会被浏览器读取,直到一个块完成。

在任何情况下,并非所有浏览器都可以从responseText读取XMLHttpRequest,直到请求完全完成。因此,要使其适用于所有客户端,您必须尝试不同的机制,例如包含旧版HTML-iframe的多个 - <script>

总结:这是一堆麻烦,也许不值得。更简单的部署可能性是对每个名称的单独AJAX请求。