$(document).ready(function() {
(function poll() {
setTimeout(function() {
$.ajax({
url: "/project1/api/getAllUsers",
type: "GET",
success: function(data) {
console.log("polling");
},
dataType: "json",
complete: poll,
timeout: 5000
}), 5000
});
})();
});
这只是以服务器响应的速度保持执行,但我希望它只会每 5 秒轮询一次。有什么建议吗?
编辑:我应该补充,请求完成后5秒会更好。
看来你已经设法把你的setTimeout
延迟参数写在了错误的地方。
$(document).ready(function() {
(function poll() {
setTimeout(function() {
$.ajax({
url: "/project1/api/getAllUsers",
type: "GET",
success: function(data) {
console.log("polling");
},
dataType: "json",
complete: poll,
timeout: 5000
}) //, 5000 <-- oops.
}, 5000); // <-- should be here instead
})();
});
如果您按照大括号,您会看到您正在呼叫setTimeout
,例如:
setTimeout(function () {
$.ajax(), 5000
})
并且应该是
setTimeout(function () {
$.ajax();
}, 5000)
这应该在前一个轮询完成后 5 秒调用 AJAX 轮询。
如果它应该每 5 秒轮询一次,而不一定在完成最后一个请求后 5 秒轮询一次,则可以使用 setInterval。不知道这是否可以接受,但它会使递归变得不必要。
function poll() {
$.ajax({
url: "/project1/api/getAllUsers",
type: "GET",
success: function(data) {
console.log("polling");
},
dataType: "json"
});
}
setInterval(poll, 5000);
如果你想使用jQuery的promise语法,而不是回调语法,这是另一种整洁的方法。
function poll() {
$.get('http://your-api-endpoint.com')
.done(function() {
// 200 - OK response
})
.fail(function() {
// Error Response
})
.always(function () {
setTimeout(function() {
poll();
}, 5000);
});
}
poll();