我需要每小时轮询一次网络服务来检查新邮件。我想用jQuery做。 ajax调用将是这样的:
function checkForMessages(rowid) {
$.ajax({
type: "POST",
url: "MyPage.aspx/CheckForMessages",
contentType: "application/json; charset=utf-8",
data: "{'currentMessages': '" + cMessages+ "'}",
dataType: "json",
success: function (msg) {
},
error: function (response) {
}
});
}
url: "MyPage.aspx/CheckForMessages"
实际上是一个PageMethod而不是Webservice。
我不明白的是如何使用等待一小时来调用上述函数的jquery来使“loop”。
那么我怎样才能使调用此函数的代码仅每小时一次?
答案 0 :(得分:0)
window.setIntervall(function, delay);
以毫秒为单位延迟。
但是,使用此方法,网站必须始终打开。您可以使用服务器发送事件将消息从服务器推送到您的站点,但这需要大量工作..
答案 1 :(得分:0)
查看setInterval()
...
http://www.w3schools.com/jsref/met_win_setinterval.asp
setInterval(checkForMessages, 3600000);
答案 2 :(得分:0)
window.setInterval是最好的方法,显然它只会在一小时后轮询,如果网页仍然打开。
$(function () {
setInterval(myPollingMethod, 3600000);
});
function myPollingMethod()
{
//this will repeat every 1 hour (3600 seconds)
}
如果你想停止轮询,也不要忘记调用window.clearInterval方法。
答案 3 :(得分:0)
function checkForMessages(rowid) {
$.ajax({
type: "POST",
url: "MyPage.aspx/CheckForMessages",
contentType: "application/json; charset=utf-8",
data: "{'currentMessages': '" + cMessages+ "'}",
dataType: "json",
success: function (msg) {
//do stuff here
setTimeout(function(rowid) {checkForMessages(rowid);},3600000);
},
error: function (response) {
}
});
}
答案 4 :(得分:0)
您可以使用setTimeout
功能来获得所需的结果:
function checkForMessages(rowid) {
$.ajax({
type: "POST",
url: "MyPage.aspx/CheckForMessages",
contentType: "application/json; charset=utf-8",
data: "{'currentMessages': '" + cMessages+ "'}",
dataType: "json",
success: function (msg) {
...
},
error: function (response) {
...
},
complete: function() {
...
setTimeout(function() { checkForMessages(rowid); }, 3600000);
}
});
}
这种方式当你第一次调用你的函数并且你的$.ajax
调用完成时(无论是成功还是错误)它将安排在一小时后再次执行该函数(但请记住一小时在网络世界中有很多时间,授权可能会过期等。)。