Javascript JQuery AJAX轮询语法

Javascript JQuery AJAX轮询语法,javascript,jquery,ajax,polling,Javascript,Jquery,Ajax,Polling,我有点生疏,所以请容忍我 我需要轮询SharePoint Web服务,直到它返回值。我认为我的代码格式不正确。如果有一个预先存在的线程可以解决这个问题,请告诉我;我相对有限的理解可能使我无法认识到这一点 function Poll2(){ $.ajax({ //Use an ABSOLUTE reference to your target webservice url: "https://mydomain.com/Sandbox/bitest/_vti_

我有点生疏,所以请容忍我

我需要轮询SharePoint Web服务,直到它返回值。我认为我的代码格式不正确。如果有一个预先存在的线程可以解决这个问题,请告诉我;我相对有限的理解可能使我无法认识到这一点

function Poll2(){
    $.ajax({
        //Use an ABSOLUTE reference to your target webservice
        url: "https://mydomain.com/Sandbox/bitest/_vti_bin/lists.asmx",
        type: "POST",
        dataType: "xml",
        data: soapEnv,
        success:processResult,
        complete: Poll2,
        timeout: 5000,
        contentType: "text/xml; charset=\"utf-8\"",
        async: true
    });
}
我希望它每5秒轮询一次服务,直到成功,在这一点上,它将进入“processResult”函数,在该函数中处理所有数据。恐怕我已经通过引用父函数创建了一个无限循环

-------------编辑和新建代码-----------------

我已经找到了一个解决方案,大致完成了我正在寻找的目标。事实证明,我真的只希望我的请求被解雇一次。然而,对于“无限”轮询例程来说,这项工作做得非常好

(function poll() {
    setTimeout(function () {
        $.ajax({
            type: 'POST',
            dataType: 'json',
            url: 'http://somewhere.com/rest/123',
            success: function (data) {
                MyNamespace.myFunction(data); //DO ANY PROCESS HERE
            },
            complete: poll
        });
    }, 5000);
})();
(function poll() {
    setTimeout(function () {
        $.ajax({
            type: 'POST',
            dataType: 'json',
            url: 'http://somewhere.com/rest/123',
            success: function (data) {
                MyNamespace.myFunction(data); //DO ANY PROCESS HERE
            },
            complete: poll
        });
    }, 5000);
})();

然而,我要注意的是,这个例程直到执行5秒后才初始化它的第一次轮询。不过这是一段简单的代码!非常感谢作者。

您创建的无限循环肯定是对的


但您可以检查是否需要再次发出请求,如果不需要,则只需处理数据(如果此处需要)并从Poll2函数返回。

超时设置告诉jQuery在放弃之前应该等待服务器响应多长时间

function Poll2(){
    $.ajax({
        //Use an ABSOLUTE reference to your target webservice
        url: "https://example.com/Sandbox/bitest/_vti_bin/lists.asmx",
        type: "POST",
        dataType: "xml",
        data: soapEnv,
        success:processResult,
        timeout: 5000,
        contentType: "text/xml; charset=\"utf-8\"",
        async: true
    });
}
如果你想让它每五秒钟尝试一次直到成功,你可以这样做:

function Poll2(){
    $.ajax({
        //Use an ABSOLUTE reference to your target webservice
        url: "https://example.com/Sandbox/bitest/_vti_bin/lists.asmx",
        type: "POST",
        dataType: "xml",
        data: soapEnv,
        success:processResult,
        complete: Poll2,
        timeout: 5000,
        contentType: "text/xml; charset=\"utf-8\"",
        async: true
        error: function(xhr) {
            setTimeout(Poll2, 5000);
        }
    });
}

如上所述,在我的编辑我已经找到了一个解决方案,大致完成了我所寻找的。事实证明,我真的只希望我的请求被解雇一次。然而,对于“无限”轮询例程来说,这项工作做得非常好

(function poll() {
    setTimeout(function () {
        $.ajax({
            type: 'POST',
            dataType: 'json',
            url: 'http://somewhere.com/rest/123',
            success: function (data) {
                MyNamespace.myFunction(data); //DO ANY PROCESS HERE
            },
            complete: poll
        });
    }, 5000);
})();
(function poll() {
    setTimeout(function () {
        $.ajax({
            type: 'POST',
            dataType: 'json',
            url: 'http://somewhere.com/rest/123',
            success: function (data) {
                MyNamespace.myFunction(data); //DO ANY PROCESS HERE
            },
            complete: poll
        });
    }, 5000);
})();

然而,我要注意的是,这个例程直到执行5秒后才初始化它的第一次轮询。不过这是一段简单的代码!非常感谢作者。

Daniel,感谢您的回复!比方说,我希望它在成功后只发射一次。我是否在这里编写了“无限循环”?显然,这对于不断变化的数据是有用的;那运行一次“成功”函数然后终止的东西呢?再次感谢!Daniel,最后一点注意:看起来您的答案正是我需要的,但是
complete:Poll2,
行导致此函数立即进入有限循环。删除
complete:Poll2,
行会使它以我想要的方式运行。再次感谢!因此,如果AJAX方法上面的“if”语句中嵌套了一个“return”命令,那么如果成功的话,我就可以摆脱这种情况了?我可以检查什么值来确定此方法是否成功?原谅我的绿色。