jQuery和PHP中的无限循环.我应该做些什么来让它起作用呢?
Endless loop in jQuery and PHP. What should I change to make it work?
<?
if($_POST['begin'])
{
while(1)
{
echo "1";
sleep(2);
}
die();
}
?>
<span class="answerswer"></span>
<script type="text/javascript">
$(document).ready(function() {
$.ajax({
type: "POST",
url: "exp.php",
data: "begin=1",
success: function(msg){
$(".answer").html(msg);
}
})
})
</script>
当然,它不起作用。我应该做些什么改变才能使它起作用?我可以避免使用setInterval, setTimeout或其他函数在javascript?
顺便说一下,我在这里要做的是每两秒钟写一次数字1
我从来没有尝试过,但是XMLHttpRequest接口应该支持流请求。特别是.readyState==3
表示部分结果(参见规范http://www.w3.org/TR/XMLHttpRequest/#event-handler-attributes)。
当你不想设置间隔处理程序时,你将不得不重写实际的XHR回调,因为jQuery success:
只会在完成时触发。
xmlHttp = $.ajax({ ... });
xmlHttp.onreadystatechange = function () {
if (xmlHttp.readyState >= 3) {
alert(xmlHttp.responseText);
}
};
注意responseText将始终包含累积的数据。所以如果你想读最新的1
,你必须把它分成'n
或其他东西。
好的,我想我知道你想要什么了。这很奇怪……但好。
<script type="text/javascript">
$(document).ready(function() {
function fetch_a_one() {
$.ajax({
type: "POST",
url: "exp.php",
data: "begin=1",
success: function(msg){
$(".answer").html(msg);
fetch_a_one();
}
})
}
fetch_a_one();
})
</script>
<div class="answerswer"></div>
PHP脚本:<?php
sleep(2); // way two seconds
exit(1); // print 1
?>
减去启动Ajax请求的一些延迟和服务器的延迟,这应该每2秒打印'1' ..不知道你为什么要这个
这是错误的方法,因为你的成功函数在收到服务器的响应之前不会运行,因为它在一个无限循环中不会发生。
你需要在JavaScript中使用setInterval来处理计时。当然,如果您想做的只是每五秒钟打印一个数字1,那么您不需要对服务器端进行任何调用(尽管我认为您最终想要实现的东西更多—您可能想要对此进行一点扩展)。
你可以考虑打开一个WebSocket返回到服务器来处理这种正在进行的通信。看看PusherApp - http://pusher.com/
您可能需要使用JavaScript。您可以不断地轮询服务器资源以从中获取信息,但实际的循环和延迟需要在JavaScript中实现。
这样做的原因是PHP脚本需要在某个时刻完成处理。它不是流输出到客户端,而是构建输出发送到客户端。在您提供的代码中,它永远在构建输出而从不发送输出。您可以尝试从PHP脚本中刷新缓冲区,以便在构建更多输出的同时向客户机发送一些输出,但请查看该链接中的注意事项。这不是一个真正的干净的方法来完成这个任务,并且在这种情况下可能会导致比它解决的更多的问题。在某些时候,服务器资源需要停止处理并提交响应。试图短路HTTP的基本概念可能有点像黑客。
我认为问题是,你在写无休止的PHP循环。
jQuery在启动ajax请求时,会等待脚本完成他的工作。然而,脚本永远不会结束-所以浏览器永远不会得到完整的答案。你需要使用setTimeout,没有其他的方法-至少没有其他简单和安全的方法。
- 更改URL后做些什么
- 检查是否有匹配的类名,然后做些什么
- 当我单击标记而不是删除它时,我应该做些什么来创建自定义菜单
- Javascript viewport then element.style.left 不起作用?这有什么问题
- 我在 MAP 初始化时创建了一个默认标记,但标记没有显示内容?我能为它做些什么
- 客户端,我能做些什么来检查是否有人在入侵我的网站
- jqueryajax表单提交请求第一次点击不起作用可能是什么原因
- 简单的SSL-我需要做些什么来制作我的ajax'd登录SSL安全
- 对单选按钮选择更改AngularJS做些什么
- 在jQuery中查找特定元素's.每个函数并用它做些什么
- 我需要做些什么才能让它显示所有的用户输入/选择
- 我可以做些什么来让我网站上的Javascript代码与Firefox一起工作
- javascript杀死了我的另一个脚本.我能做些什么来隔离它
- 为什么在Internet Explorer中每个都不起作用,还有什么可供选择
- 在通过JavaScript将JSON数据插入页面之前,应该对其做些什么?
- 第一个更大的javascript / jquery网站即将完成-上线前要做些什么
- 我需要做些什么才能让账户进入我的流星项目工作
- 为了传递关于JavaScript函数作用域的教程,我必须对变量count做些什么?
- 上面的代码在chrome和firefox上都运行良好.但在IE中这不会给保存弹出框!我应该做些什么来支持这些代码?
- jQuery和PHP中的无限循环.我应该做些什么来让它起作用呢?