如何捕获超时请求的错误

时间:2014-06-19 15:33:13

标签: javascript php ajax timeout comet

我知道这个话题已经讨论了很多,但我看不到它的完美执行。在这种情况下,我想得到一些解释。所以,这是一个简单的代码:

!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代码无法捕获的错误。我试图找到解决方案,但我不能。我请你帮我找到这个问题的解决方案,因为在我的任务中,脚本必须向服务器发出几个请求以获得必要的响应,即使之前的一些响应是超时排除。
解决

0 个答案:

没有答案