我知道这个话题已经讨论了很多,但我看不到它的完美执行。在这种情况下,我想得到一些解释。所以,这是一个简单的代码:
!DOCTYPE html>
<html>
<head>
<title>Long Poll Example</title>
<script src="jquery-2.1.1.min.js" type="text/javascript"></script>
<script type="text/javascript" charset="utf-8">
var timestamp=null;
function waitForMsg(){
$.ajax({
type: "GET",
url: "a2.php?timestamp="+timestamp,
async: true,
cache: false,
success: function(data){
var json=eval('('+data+ ')');
if (json['msg'] !="") {
//alert( json['msg'] );
//Display message here
$("#msgold").empty();
$("#msgold").append(json['msg'] +"<hr>").slideDown("slow");
}
timestamp =json["timestamp"];
setTimeout("waitForMsg()",1000);
},
error: function(XMLHttpRequest,textStatus,errorThrown) {
// alert("error: "+textStatus + " "+ errorThrown );
setTimeout("waitForMsg()",15000);
}
});
}
$(document).ready(
function()
{
waitForMsg();
});
</script>
</head><body>
<H3> Server Results </H3>
<hr />
<div id="messages"><div id="msgold"></div></div>
<A href='stream.html'>Another streaming Example Stream.html </a>
</body>
</html>
和php ::
<?php
//Long Polling
$filename= dirname(__FILE__)."/data.txt";
$lastmodif = isset( $_GET['timestamp'])? $_GET['timestamp']: 0 ;
$currentmodif=filemtime($filename);
while ($currentmodif <= $lastmodif) {
usleep(10000);
clearstatcache();
$currentmodif =filemtime($filename);
}
$response = array();
$response['msg'] =Date("h:i:s")." ".file_get_contents($filename);
$response['timestamp']= $currentmodif;
echo json_encode($response);
所以,这是非常简单的执行长轮询彗星的代码,但它并不完美。如果您尝试在请求时间内更改data.txt文件(少于30秒或其他set_timeout_interval无关紧要),它可以正常工作。但是,当这个时间出来时,它会响应一个javascript代码无法捕获的错误。我试图找到解决方案,但我不能。我请你帮我找到这个问题的解决方案,因为在我的任务中,脚本必须向服务器发出几个请求以获得必要的响应,即使之前的一些响应是超时排除。
的解决