Javascript JQuery AJAX轮询语法
我有点生疏,所以请容忍我 我需要轮询SharePoint Web服务,直到它返回值。我认为我的代码格式不正确。如果有一个预先存在的线程可以解决这个问题,请告诉我;我相对有限的理解可能使我无法认识到这一点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_
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”命令,那么如果成功的话,我就可以摆脱这种情况了?我可以检查什么值来确定此方法是否成功?原谅我的绿色。