3

我有点绿,所以请多多包涵。

我需要轮询 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);
})();

但是,我要注意,该例程在执行后 5 秒才初始化其第一次轮询。一段简单的代码!非常感谢作者。

4

3 回答 3

4

正如上面在我的编辑中提到的,我在这篇博文中找到了一个大致完成我正在寻找的解决方案。事实证明,我真的只希望我的请求触发一次。但是,对于“无限”轮询例程,这可以很好地完成工作。

(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 秒才初始化其第一次轮询。一段简单的代码!非常感谢作者。

于 2012-08-16T13:42:27.730 回答
1

超时设置告诉 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);
        }
    });
}
于 2012-08-13T19:45:20.537 回答
0

你肯定是对的,创建了一个无限循环。

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

于 2012-08-13T19:42:43.880 回答