Ajax 轮询 - 超时立即触发

Ajax polling - Timeout firing with no delay

我使用 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 了解更多讨论。