javascript:setTimeout和clearTimeout问题
我正在尝试通过AJAX进行轮询,希望在AJAX调用成功后清除超时。问题是超时永远不会清除,新的AJAX请求不断被触发 我在SO上查找了类似的问题,但它们都表明问题是一个局部范围的变量。但是,我在函数之外声明了javascript:setTimeout和clearTimeout问题,javascript,jquery,ajax,Javascript,Jquery,Ajax,我正在尝试通过AJAX进行轮询,希望在AJAX调用成功后清除超时。问题是超时永远不会清除,新的AJAX请求不断被触发 我在SO上查找了类似的问题,但它们都表明问题是一个局部范围的变量。但是,我在函数之外声明了poll\uxhr变量 var poll_xhr=null; (函数poll(){ poll_xhr=setTimeout(函数(){ $.ajax({ 键入:“POST”, 数据类型:“json”, url:“检查状态/”, 成功:功能(数据){ 控制台日志(数据); 如果(数据=='
poll\uxhr
变量
var poll_xhr=null;
(函数poll(){
poll_xhr=setTimeout(函数(){
$.ajax({
键入:“POST”,
数据类型:“json”,
url:“检查状态/”,
成功:功能(数据){
控制台日志(数据);
如果(数据=='OK'){
clearTimeout(轮询\u xhr);
window.location.href='../'
}
},
完成:投票
});
}, 3000);
})();
这就是您的代码所做的:
poll
,这将启动一个新的超时删除
complete:poll
并将poll()
放入if
语句中(您当前有clearTimeout
),如果您想发出另一个请求 为了进行检查,在数据中添加一些警报=='OK'。如果没有,意味着数据类型不匹配。要解决此问题,请使用data=='OK'。您的程序流程是:将poll\u xhr设置为新的超时,它会在3000毫秒后触发并启动ajax请求。成功时,清除超时(不必要,它已经触发!!),完成后,再次轮询,开始新的超时等。这是因为AJAX请求在成功回调时再次异步调用poll()
。它只是再次触发setTimeout。您能在这里发布您的检查状态
代码吗。我认为json\u encode
不是working@Chinu检查状态正常,我仔细检查了一下。明白你的意思了@Quentin,如果出现故障/错误,我想再调用一次ajax,那么我应该将poll()
放在error属性中吗?你现有的代码意味着如果数据不是字符串“OK”,你想发出另一个请求。这表明您需要一个else
,而不是一个错误处理程序。也就是说,您的服务器端代码可能会触发错误,但您没有与我们共享它。我的错,我明白这是怎么回事。如果在出现404个错误时继续触发AJAX请求,并在成功时重定向到一个新页面,并且data==“OK”,那么我想要实现的是。然后,您可能确实希望使用错误处理程序进行重复调用。