我试图用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等等我该怎么做?对不起,我的英文,谢谢你的答案:)
答案 0 :(得分:0)
ajax等待回复,所以你正在做最后的回应等待。你必须做单独的请求。可能设置后续请求取决于前一个的结果。
答案 1 :(得分:0)
您需要使用html5网络套接字。在请求完成之前,使用标准的ajax将不会返回。
答案 2 :(得分:0)
你的代码完全按照你的要求行事。当接收到最后一个字节而不是接收到该字节时,在客户端提供ajax响应。
如果您是从服务器端进展到客户端,那么客户端必须轮询并且服务器保持某种状态以进行响应,而不是因为服务器尝试发送流响应而已。新的HTML5客户端套接字可以帮助您在这里,而不是轮询客户端可以由服务器调用
答案 3 :(得分:0)
如果我理解你的问题,你需要进行4次ajax方法调用。由于您希望每次调用都有不同的值,因此您需要将状态保存在某个位置(在客户端或服务器上),以便您知道自己正在进行哪个呼叫。如果样本中的暂停是预期程序的一部分(而不仅仅是为了样本),那么在客户端Javascript中可能会更好。
答案 4 :(得分:-1)
服务器缓冲其输出 - 发送单个字符极其浪费网络资源。要强制PHP和Web服务器刷新缓冲区,至少需要:
echo "1";
flush();
ob_flush();
echo "2";
etc...