2013-04-17 5 views
3

Существует страница, и я хочу периодически делать «фоновые» запросы ajax. Таким образом, страница загружается, тогда она должна отправлять запросы ajax в определенное время.Периодически отправляйте запросы ajax

Я мог бы использовать cron для этого. Я никогда не использовал ранее, поэтому мне интересно, подходит ли это для этой задачи. Есть ли еще более простой способ?

P.S. Время задержки составит около 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(); 
+0

Где я могу поместить код для обновления части страницы? например, '$ ('# my_id'). text (" data is "+ data.result);' –

+0

Вы можете поместить это в обратный вызов '.done()' против AJAX, как обычно. –

+0

oo, мужчина вы из Филиппин. Я буду там через пару дней! –

4

Cron запускается на ServerSide и вы используете HTML и AJAX, так что вы должны решить этот вопрос в Javascript :-)

Используя что-то вроде setInterval вы можете держать выполнение функции, ваш случай может быть что-то как опрос URL-адрес с помощью AJAX:

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

'setInterval (updatePage, 5000);' – stecb

+0

развивавших @ комментарий stecb, сделайте все возможное, чтобы никогда не использовать 'eval' версию' setInterval() 'анс' SetTimeout() '. Всегда используйте функцию напрямую, либо по ссылке, либо с помощью прямой лямбда. –

+0

Вы, ребята, правы, я обновил ответ. – Bitterzoet

1

в зависимости от версии рельсов вы можете быть в состоянии использовать periodically_call_remote, в противном случае вам потребуется альтернатива Jquery, что @Bitterzoet описано выше.

Дополнительная информация in this question.

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") 
       } 
      });  

     } 
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); 
}); 
Смежные вопросы