4

有一个页面,我想定期发出“后台”ajax 请求。所以页面被加载然后它应该在一定时间内发送 ajax 请求。

我可能会为此使用cron。我以前从未使用过,所以我想知道它是否适合该任务。还有其他更简单的方法吗?

PS 时间延迟将是大约 5 分钟。

4

5 回答 5

6

由于在您发送 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();
于 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

您可以像这样在四秒内发送 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 回答
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

根据您可以使用的 rails 版本periodically_call_remote,否则您将需要@Bitterzoet 描述的 jquery 替代方案。

这个问题的更多信息。

于 2013-04-17T08:09:35.807 回答