Ajax轮询-超时触发无延迟

问题描述

我使用Ajax来轮询IIS / ASP服务器。我一次调用msgPoll(“”),然后在跟踪轮询代码时发现msgPoll被重复调用,而不是每30秒重复一次。我在做什么错了?

var msgTimOut;
function msgPoll(text) {
    var msgData = {};
    msgData.UID = $("#hidUID").val();
    msgData.data = text;
    $.ajax({
        type: "POST",url: "WSWebJudge.asmx/MsgPoll",cache: false,data: JSON.stringify(msgData),contentType: "application/json; charset=utf-8",dataType: "json",success: function(data) {
            resp=JSON.parse(data.d);
            if (resp.status == 1) setMsg(resp.msg);
            if (msgTimOut) clearTimeout(msgTimOut);
            msgTimOut = setTimeout(msgPoll(""),3000);
        },error: function (jqXHR,textStatus,errorThrown) {
            alert("Messaging - textStatus: " + textStatus + " errorThrown: " + errorThrown);
        }
    });
}       

解决方法

setTimeout(function(){msgPoll("")},30000)

  1. 您有3秒而不是30秒
  2. 在功能块中调用它-有关更多讨论,请参见https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setTimeout