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 轮询语法的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET使用Jquery LigerUI 轮询方式配合Ajax实现消息推送