4

ページがあり、定期的に「バックグラウンド」の ajax リクエストを作成したいと考えています。そのため、ページが読み込まれ、一定時間内に ajax リクエストが送信されます。

そのためにcronを使用する場合があります。これまで使用したことがないので、そのタスクに適合するかどうか疑問に思っています。他にもっと簡単な方法はありますか?

PS 遅延時間は約 5 分です。

4

5 に答える 5

6

基本的に、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();
于 2013-04-17T08:10:33.300 に答える
5

Cron はサーバー側で実行され、HTML と AJAX を使用しているため、この問題は Javascript で解決する必要があります :-)

setInterval関数を実行し続けることができるようなものを使用することで、AJAX 経由で URL をポーリングするようなものになる可能性があります。

function updatePage(){
  // perform AJAX request
}
setInterval(updatePage, 5000);
于 2013-04-17T08:05:34.867 に答える
1

Rails のバージョンによっては、 を使用できる場合がperiodically_call_remoteあります。それ以外の場合は、@Bitterzoet が説明した jquery の代替が必要になります。

詳細については、この質問を参照してください。

于 2013-04-17T08:09:35.807 に答える
1

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);
});
于 2013-04-17T08:25:30.437 に答える
1

次のように 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")
                }
            });       

        }
于 2013-04-17T08:23:03.810 に答える