【发布时间】:2011-11-07 03:27:15
【问题描述】:
我正在尝试使用 ajax 立即获取数据,但我做不到。问题是,当我发出请求时,响应即将结束 php 进程。我想在每个 echo 命令之后获取数据。所以这里是一个简单的例子。有两个文件,主html文件(包括javascript)和php文件。
try.html
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Get Data</title>
<script type="text/javascript">
function makeObject() {
var newObject;
var browser = navigator.appName;
if(browser == "Microsoft Internet Explorer"){
newObject = new ActiveXObject("Microsoft.XMLHTTP");
}
else {
newObject = new XMLHttpRequest();
}
if (newObject.overrideMimeType) {
newObject.overrideMimeType('text/xml; charset=UTF-8;');
}
return newObject;
}
var newOne=makeObject();
function getData()
{
newOne.open('get','process.php',true);
newOne.onreadystatechange=function(){
if (newOne.readyState==4)
{
var box=document.getElementById("queryResult");
box.innerHTML=newOne.responseText;
}
}
newOne.send(null);
}
</script>
</head>
<body>
<input type="button" id="doit" value="Start Query" onclick="getData();" />
<div id="queryResult"></div>
</body>
</html>
和process.php
<?php
echo "1";
sleep(1);
echo "2";
sleep(1);
echo "3";
sleep(1);
echo "4";
sleep(1);
echo "5";
?>
当我单击开始查询按钮时,它等待 4 秒,然后同时写入 12345。我想写 1 并等待 1 秒然后写 2 并等待 1 秒然后写 3 等等。我该怎么做?对不起我的英语,谢谢你的回答:)
【问题讨论】:
-
您的整个
<?php ?>代码同时集中在一起。您的echo命令不会发送到客户端,而是发送到将一次性发送到客户端的数据队列。 -
你真正想要完成什么?这可能可以通过摆弄 PHP 的输出缓冲来完成,但这可能不是你应该做的任何你想做的事情。
-
在 JS 中而不是 PHP 中进行所有这些延迟。
-
我认为您应该在 JavaScript 中执行延迟部分,同时在开始时请求整个数据集或在每个 JS-timeout/-interval 之后发送新请求。
-
我实际上想在 php 端发送邮件。每发送一封邮件后,它都会为 ex 回显。 “邮件已成功发送/未成功发送 example@example.com。”我可以采用不同的方式,例如,getData 函数接受一个参数并将其发送到 php,所以当我调用该函数时,只发送了 1 封邮件。当响应到来时,它会调用不同的参数。我认为这会使用这么多的数据流量。我说的对吗?