ページがあり、定期的に「バックグラウンド」の ajax リクエストを作成したいと考えています。そのため、ページが読み込まれ、一定時間内に ajax リクエストが送信されます。
そのためにcronを使用する場合があります。これまで使用したことがないので、そのタスクに適合するかどうか疑問に思っています。他にもっと簡単な方法はありますか?
PS 遅延時間は約 5 分です。
ページがあり、定期的に「バックグラウンド」の ajax リクエストを作成したいと考えています。そのため、ページが読み込まれ、一定時間内に ajax リクエストが送信されます。
そのためにcronを使用する場合があります。これまで使用したことがないので、そのタスクに適合するかどうか疑問に思っています。他にもっと簡単な方法はありますか?
PS 遅延時間は約 5 分です。
基本的に、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);
Rails のバージョンによっては、 を使用できる場合がperiodically_call_remote
あります。それ以外の場合は、@Bitterzoet が説明した jquery の代替が必要になります。
詳細については、この質問を参照してください。
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);
});
次のように 4 秒で 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")
}
});
}