使用jQuery对Web服务进行轮询

时间:2013-01-14 15:19:39

标签: jquery asp.net ajax web-services

我需要每小时轮询一次网络服务来检查新邮件。我想用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”

那么我怎样才能使调用此函数的代码仅每小时一次

5 个答案:

答案 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调用完成时(无论是成功还是错误)它将安排在一小时后再次执行该函数(但请记住一小时在网络世界中有很多时间,授权可能会过期等。)。