【问题标题】:JQuery AJAX Polling SyntaxJQuery AJAX 轮询语法
【发布时间】:2012-08-13 19:39:31
【问题描述】:

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

我需要轮询 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”函数。恐怕我引用父函数创建了一个无限循环。

-------------------编辑和新代码-------强>

我找到了一个解决方案in this blog post大致完成了我正在寻找的。事实证明,我真的只希望我的请求触发一次。但是,对于“无限”轮询例程,这可以很好地完成工作。

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

【问题讨论】:

    标签: javascript jquery ajax polling


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      超时设置告诉 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);
              }
          });
      }
      

      【讨论】:

      • 丹尼尔,感谢您的回复!假设我希望它在成功后只触发一次。我在这里编写了一个“无限循环”吗?很明显,这对于不断变化的数据可能很有用;运行我的“成功”功能一次然后终止的东西呢?再次感谢!
      • Daniel,最后一点:您的答案似乎正是我需要的,但是complete: Poll2, 行导致此功能立即进入无限循环。删除 complete: Poll2, 行会导致它以我正在寻找的方式运行。再次感谢!
      【解决方案3】:

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

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

      【讨论】:

      • 因此,如果成功,嵌套在 AJAX 方法上方的“if”语句中的“return”命令可能会让我摆脱这种状态?我可以检查什么值来查看此方法是否成功?原谅我的绿色。
      猜你喜欢
      • 2011-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-12
      • 2012-10-08
      • 1970-01-01
      相关资源
      最近更新 更多