【问题标题】:Periodically send ajax requests定期发送ajax请求
【发布时间】:2013-04-09 21:28:29
【问题描述】:

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

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

附:时间延迟大约为 5 分钟。

【问题讨论】:

    标签: javascript jquery ruby-on-rails ruby ajax


    【解决方案1】:

    由于在您发送 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);
    • 您可以像往常一样将其放在针对 AJAX 的 .done() 回调中。
    • 哦,伙计,你来自菲律宾。我过几天就到!
    【解决方案2】:

    Cron 在服务器端运行,您使用的是 HTML 和 AJAX,所以您应该使用 Javascript 解决这个问题 :-)

    通过使用setInterval 之类的东西,您可以继续执行一个函数,您的情况可能类似于通过 AJAX 轮询一个 url:

    function updatePage(){
      // perform AJAX request
    }
    setInterval(updatePage, 5000);
    

    【讨论】:

    • 详细说明@stecb 的评论,尽量不要使用eval 版本的setInterval()setTimeout()。始终直接使用函数,通过引用或直接 lambda。
    • 对@RichardNeilIlagan :) 我在移动设备上.. ty ;) 顺便说一句,这也是范围问题,将其作为字符串传递将为该 foo 设置全局范围。
    【解决方案3】:

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

    更多信息in this question.

    【讨论】:

      【解决方案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")
                      }
                  });       
      
              }
      

      【讨论】:

        【解决方案5】:

        你在使用 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);
        });
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-04-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-06-30
          • 2019-10-15
          • 2013-12-13
          相关资源
          最近更新 更多