如何使用ajax立即获取数据?

时间:2011-08-30 20:30:35

标签: php ajax comet

我试图用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等等我该怎么做?对不起,我的英文,谢谢你的答案:)

5 个答案:

答案 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...