JQuery AJAX 轮询语法

Posted

技术标签:

【中文标题】JQuery AJAX 轮询语法【英文标题】:JQuery AJAX Polling Syntax 【发布时间】: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 秒才初始化它的第一次轮询。一段简单的代码!非常感谢作者。

【问题讨论】:

【参考方案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”命令可能会让我摆脱这种状态?我可以检查什么值来查看此方法是否成功?原谅我的绿色。

以上是关于JQuery AJAX 轮询语法的主要内容,如果未能解决你的问题,请参考以下文章

Comet,使用 jquery 教程进行长轮询 [关闭]

ASP.NET使用Jquery LigerUI 轮询方式配合Ajax实现消息推送

在带有 turbolink 的 Rails 中使用 jQuery 进行长轮询

Jquery中ajax基本语法

jquery的ajax的语法

jquery-messager消息