Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用Ajax的PHP刷新循环_Javascript_Php_Ajax - Fatal编程技术网

Javascript 使用Ajax的PHP刷新循环

Javascript 使用Ajax的PHP刷新循环,javascript,php,ajax,Javascript,Php,Ajax,很抱歉重复了问题,但给出的答案不适用于我 到目前为止,我使用Ajax在单击按钮后执行PHP,并逐个刷新echo()。然而,我看到我的回声一下子就来了。下面是我的代码: PHP: ob_start(); echo“服务器从用户处收到此信息:”$调试模式。“”; echo“服务器回答此问题:”; ob_flush(); 对于($i=1;$i) 阿贾克斯: 函数runAjax(调试模式) { 如果(调试模式==“”) { document.getElementById(“outputPhp”).

很抱歉重复了问题,但给出的答案不适用于我

到目前为止,我使用Ajax在单击按钮后执行PHP,并逐个刷新echo()。然而,我看到我的回声一下子就来了。下面是我的代码:

PHP:
ob_start();
echo“服务器从用户处收到此信息:”$调试模式。“
”; echo“服务器回答此问题:
”; ob_flush(); 对于($i=1;$i)
阿贾克斯:


函数runAjax(调试模式)
{
如果(调试模式==“”)
{
document.getElementById(“outputPhp”).innerHTML=“未向服务器发送任何内容”;
返回;
}
if(window.XMLHttpRequest)
{
//AJAX与IE7+、Chrome、Firefox、Safari、Opera一起使用
xmlhttp=新的XMLHttpRequest();
}
其他的
{
//AJAX与IE6、IE5的配合使用
xmlhttp=新的ActiveXObject(“Microsoft.xmlhttp”);
}
xmlhttp.onreadystatechange=函数()
{
if(xmlhttp.readyState==4&&xmlhttp.status==200)
{
document.getElementById(“outputPhp”).innerHTML=xmlhttp.responseText;
}
}
open(“GET”、“TestButtonClick.php?q=“+debugMode,true”);
xmlhttp.send();
}
调试

单击此按钮运行所有测试


谢谢你的帮助! 彼得

我会帮你的


并且,您将“xmlhttp.readyState==4”修改为“xmlhttp.readyState==3”

您是否检查了PHP代码在执行时是否显示了输出?如果是,那么您可以关注JavaScript.PHP代码在调用自身时不会刷新。我想我必须查看PHP代码。感谢您的提示。在您睡眠后,它应该会立即出现在php代码中,您必须从php文件中删除for循环,只需
echo(“Hello World”$i.“
”;
。从ajax发送
$i
参数,并使用javascript设置睡眠时间,即以0.2s延迟调用ajax 10次,只需在
ob flush();
之后使用
echo
并删除
ob start()
ob_end_flush();
谢谢。有趣的是:我在开始时需要ob_implicit_flush();在每次echo()之后需要ob_flush();但现在它工作了。我还需要(xmlhttp.readyState==4 | | xmlhttp.readyState==3),否则我最后的echo就不会显示了。
ob_start();
echo "Server received this information from user: ". $debugMode. "<br>";
echo "Server answers this: <br>";
ob_flush();
for ($i = 1; $i <= 10; $i++) 
{
  echo( "Hello World ". $i. "<br>" );
  ob_flush();
  usleep(200000); //wait 0.2 seconds
}
ob_end_flush();
?>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<script type="text/javascript"> 

    function runAjax(debugMode)
    {
        if (debugMode=="")
        {
            document.getElementById("outputPhp").innerHTML="nothing was send to server";
            return;
        }
        if (window.XMLHttpRequest)
        {
            // AJAX use with IE7+, Chrome, Firefox, Safari, Opera
            xmlhttp=new XMLHttpRequest();
        }
        else
        {
            // AJAX use with IE6, IE5
            xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
        }
        xmlhttp.onreadystatechange=function()
        {
            if (xmlhttp.readyState==4 && xmlhttp.status==200)
            {
                document.getElementById("outputPhp").innerHTML=xmlhttp.responseText;
            }
        }
        xmlhttp.open("GET","TestButtonClick.php?q="+debugMode,true);
        xmlhttp.send();
    }
</script>
<title>Debug</title>
</head>

<body>
<br>
<input type="button" size="10" value="test" 
onclick="runAjax(this.value)"/>
<span id="test">Click this button to run all tests</span>
<br>
<br>
<p id="outputPhp"></p>
<br>
</body>

</html>