Javascript setTimeOut()不适用于AJAX

Javascript setTimeOut()不适用于AJAX,javascript,ajax,heartbeat,Javascript,Ajax,Heartbeat,在我的应用程序中,我想在一段时间后向服务器发送一些东西。 我已经用AJAX实现了它。但它是第一次工作,但不是递归地工作。我使用了setTimeOut()来完成此操作 var xmlHttp; var requestURL = 'http://localhost:1092/ClassicAJAXDemo/UpdateHeartbeat.aspx?name='; function show_data(strName) { if (strName.le

在我的应用程序中,我想在一段时间后向服务器发送一些东西。 我已经用AJAX实现了它。但它是第一次工作,但不是递归地工作。我使用了setTimeOut()来完成此操作

    var xmlHttp;
    var requestURL = 'http://localhost:1092/ClassicAJAXDemo/UpdateHeartbeat.aspx?name=';

    function show_data(strName)
    {
        if (strName.length > 0)
        {
            var url = requestURL + strName;
            xmlHttp = GetXmlHttpObject(stateChangeHandler);
            xmlHttp_Get(xmlHttp, url);
        }
    }
    function stateChangeHandler()
    {
        if (xmlHttp.readyState == 4)
        {
            var str = xmlHttp.responseText;
            setTimeOut(show_data('Dev'), 10000); // It is not waiting for 10 seconds.
        }
    }

    function xmlHttp_Get(xmlhttp, url)
    {
        xmlhttp.open('GET', url, true);
        xmlhttp.send(null);
    }

    function GetXmlHttpObject(handler)
    {
        return new XMLHttpRequest();
    }
    window.onload = show_data('Dev');
替换

window.onload = show_data('Dev');

移除

setTimeOut(show_data('Dev'), 10000);
stateChangeHandler
函数

别忘了清理间隙

使用

clearInterval(intervalID);
setInterval
setTimeout
之间的区别在于,
setTimeout()
只触发表达式一次,而
setInterval()
不断地触发表达式(除非您告诉它停止)。

替换

window.onload = show_data('Dev');

移除

setTimeOut(show_data('Dev'), 10000);
stateChangeHandler
函数

别忘了清理间隙

使用

clearInterval(intervalID);
setInterval
setTimeout
之间的区别在于,
setTimeout()
只触发表达式一次,而
setInterval()
不断地触发表达式(除非您告诉它停止)。

而不是:

setTimeOut(show_data('Dev'), 10000);
你可以/曾经尝试过:

setTimeOut(function() { show_data('Dev') }, 10000);

而不是:

setTimeOut(show_data('Dev'), 10000);
你可以/曾经尝试过:

setTimeOut(function() { show_data('Dev') }, 10000);

此代码段中有两个问题导致了错误:

window.onload=show_数据('Dev')
解释一下为什么
window.onload=show_data('Dev')不工作的顺序可能是:
窗口。onload
需要是一个函数。当您的代码执行时,它正在评估
show_data('Dev')
(它不返回值,但确实启动了一个XMLHTTPRequest,因此它似乎可以工作)并执行
window.onload=undefined

window.onload=显示数据
会起作用,但是你不能通过你的参数

幸运的是,JavaScript允许您创建匿名函数-导致:

window.onload = function() { show_data('Dev'); };
setTimeOut(显示数据('Dev'),10000)
首先,JavaScript是一种区分大小写的语言<代码>设置超时!==设置超时
。另外,setTimeout/setInterval的第一个参数应该是一个函数,它在这里遇到与
窗口相同的问题,但立即执行请求。我还认为你的意思是用与调用它相同的
strName

您的超时设置应该是:

setTimeout(function() {show_data(strName);}, 10000); 
旁注-
setInterval()
setTimeout()
都允许在运行时传递得到
eval()
ed的字符串,但我建议不要使用类似以下的方法:

// please dont use me
setTimeout("show_data(strname)", 10000);
此时,当使用这两行代码进行编辑时,您的代码应该可以工作。剩下的就是其他的优化

setTimeout()
vs.
setInterval()
看起来它将每隔10000ms检查一次,除非ajax请求失败,否则它将停止。我想你只是想永远投票
setInterval()
允许您设置“重复”计时器

删除
setTimeout
行,并将
窗口替换为onload

var updateInterval;
window.onload = function(){ 
  updateInterval = setInterval(function(){ show_data('Dev'); }, 10000);
};

// an example - lets stop polling 35 seconds from now
setTimeout(function() {
 clearInterval(updateInterval);
}, 35000);

在这个代码段中,有几个问题会造成错误:

window.onload=show_数据('Dev')
解释一下为什么
window.onload=show_data('Dev')不工作的顺序可能是:
窗口。onload
需要是一个函数。当您的代码执行时,它正在评估
show_data('Dev')
(它不返回值,但确实启动了一个XMLHTTPRequest,因此它似乎可以工作)并执行
window.onload=undefined

window.onload=显示数据
会起作用,但是你不能通过你的参数

幸运的是,JavaScript允许您创建匿名函数-导致:

window.onload = function() { show_data('Dev'); };
setTimeOut(显示数据('Dev'),10000)
首先,JavaScript是一种区分大小写的语言<代码>设置超时!==设置超时
。另外,setTimeout/setInterval的第一个参数应该是一个函数,它在这里遇到与
窗口相同的问题,但立即执行请求。我还认为你的意思是用与调用它相同的
strName

您的超时设置应该是:

setTimeout(function() {show_data(strName);}, 10000); 
旁注-
setInterval()
setTimeout()
都允许在运行时传递得到
eval()
ed的字符串,但我建议不要使用类似以下的方法:

// please dont use me
setTimeout("show_data(strname)", 10000);
此时,当使用这两行代码进行编辑时,您的代码应该可以工作。剩下的就是其他的优化

setTimeout()
vs.
setInterval()
看起来它将每隔10000ms检查一次,除非ajax请求失败,否则它将停止。我想你只是想永远投票
setInterval()
允许您设置“重复”计时器

删除
setTimeout
行,并将
窗口替换为onload

var updateInterval;
window.onload = function(){ 
  updateInterval = setInterval(function(){ show_data('Dev'); }, 10000);
};

// an example - lets stop polling 35 seconds from now
setTimeout(function() {
 clearInterval(updateInterval);
}, 35000);

您的window.onload方法肯定是错误的。将其替换为:

window.onload = function(){var intervalID = setInterval(function(){show_data('Dev')}, 10000);}

这里的其他答案似乎涵盖了其他问题,所以我不想触及。干杯

您的window.onload方法肯定是错误的。将其替换为:

window.onload = function(){var intervalID = setInterval(function(){show_data('Dev')}, 10000);}

这里的其他答案似乎涵盖了其他问题,所以我不想触及。干杯

请显示您的代码。请使用setInterval而不是setTimeout。编辑我的代码删除clearInterval方法并观察结果。您可以使用firebug检查错误吗?请显示您的代码。使用setInterval而不是setTimeout。编辑我的代码删除clearInterval方法并观察结果。你能用firebug检查错误吗?但它运行了1次,但我想重复运行。删除clearInterval方法并观察结果。是的,我已经删除了它,它正在运行