有一个页面,我想定期发出“后台”ajax 请求。所以页面被加载然后它应该在一定时间内发送 ajax 请求。
我可能会为此使用cron。我以前从未使用过,所以我想知道它是否适合该任务。还有其他更简单的方法吗?
PS 时间延迟将是大约 5 分钟。
有一个页面,我想定期发出“后台”ajax 请求。所以页面被加载然后它应该在一定时间内发送 ajax 请求。
我可能会为此使用cron。我以前从未使用过,所以我想知道它是否适合该任务。还有其他更简单的方法吗?
PS 时间延迟将是大约 5 分钟。
由于在您发送 AJAX 请求和收到完整响应之间本质上存在未知延迟,因此通常更优雅的方法是在前一个 AJAX 调用完成后的固定时间后开始下一个 AJAX 调用。这样,您还可以确保您的通话不会重叠。
var set_delay = 5000,
callout = function () {
$.ajax({
/* blah */
})
.done(function (response) {
// update the page
})
.always(function () {
setTimeout(callout, set_delay);
});
};
// initial call
callout();
Cron 在服务器端运行,您使用的是 HTML 和 AJAX,因此您应该使用 Javascript 解决这个问题 :-)
通过使用类似setInterval
可以继续执行函数的方法,您的情况可能类似于通过 AJAX 轮询 url:
function updatePage(){
// perform AJAX request
}
setInterval(updatePage, 5000);
您可以像这样在四秒内发送 ajax 请求:
setInterval(get_news, 4000);
function get_news(){
$.ajax('/dashboards/get_news', {
type: 'POST',
success: function(result) {
if(result > 0){
$('#div_1').text("See "+result+" new messages");
$('#div_1').show();
}
else{
$('#div_1').css('display', 'none');
}
},
error: function() {
// alert("Error")
}
});
}
你在用jquery吗?如果是这样,您可以实现此方法:
// first, you need asing a callback timer
var timeout = 300; //milliseconds
// this method contain your ajax request
function ajaxRequest() { //function to ajax request
$.ajax({
url: "/url/to/request/"
}).done(function(data) {
alert("response is: " + data);
});
}
$(document).on("ready", function(){
//this method will be called every 300 milliseconds
setInterval(ajaxRequest, timeout);
});
根据您可以使用的 rails 版本periodically_call_remote
,否则您将需要@Bitterzoet 描述的 jquery 替代方案。
这个问题的更多信息。