【发布时间】:2013-04-09 21:28:29
【问题描述】:
有一个页面,我想定期发出“后台”ajax 请求。所以页面被加载然后它应该在一定时间内发送 ajax 请求。
我可能会为此使用 cron。我以前从未使用过,所以我想知道它是否适合该任务。还有其他更简单的方法吗?
附:时间延迟大约为 5 分钟。
【问题讨论】:
标签: javascript jquery ruby-on-rails ruby ajax
有一个页面,我想定期发出“后台”ajax 请求。所以页面被加载然后它应该在一定时间内发送 ajax 请求。
我可能会为此使用 cron。我以前从未使用过,所以我想知道它是否适合该任务。还有其他更简单的方法吗?
附:时间延迟大约为 5 分钟。
【问题讨论】:
标签: javascript jquery ruby-on-rails ruby 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();
【讨论】:
$('#my_id').text("the data is " + data.result);
.done() 回调中。
Cron 在服务器端运行,您使用的是 HTML 和 AJAX,所以您应该使用 Javascript 解决这个问题 :-)
通过使用setInterval 之类的东西,您可以继续执行一个函数,您的情况可能类似于通过 AJAX 轮询一个 url:
function updatePage(){
// perform AJAX request
}
setInterval(updatePage, 5000);
【讨论】:
eval 版本的setInterval() 和setTimeout()。始终直接使用函数,通过引用或直接 lambda。
根据您的 Rails 版本,您可能可以使用 periodically_call_remote,否则您将需要 @Bitterzoet 描述的 jquery 替代方案。
更多信息in this question.
【讨论】:
你可以像这样在四秒内发送 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);
});
【讨论】: