2013-04-17 2 views
3

페이지가 있으며 주기적으로 "백그라운드"아약스 요청을하고 싶습니다. 따라서 페이지가로드되면 일정 시간 동안 ajax 요청을 보내야합니다.정기적으로 아약스 요청 보내기

나는 cron을 사용할 수 있습니다. 이전에 사용하지 않았으므로 그 작업에 적합한 지 궁금합니다. 다른 더 간단한 방법이 있습니까?

P. 시간 지연은 약 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

페이지의 일부를 업데이트하는 코드는 어디에 두어야합니까? –

+0

평소와 마찬가지로 AJAX에 대한'.done()'콜백에 그 데이터를 넣을 수있다. (예 : $ ('# my_id'). –

+0

oo, 너 필리핀 출신이야. 나는 이틀 안에 거기에있을거야! –

4

크론은 서버 측에서 실행되며, 당신이 기능을 실행 유지할 수 setInterval 같은 것을 사용하여

:-) 자바 스크립트에서이 문제를 해결해야한다, 그래서 당신은 당신의 사건 뭔가 수 있습니다, HTML 및 AJAX를 사용하는 폴링 AJAX를 통해 URL처럼 :

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

'에서는 setInterval (updatePage, 5000),' – stecb

+0

stecb의 코멘트 @ 부연를,'에서는 setTimeout은'eval' setInterval을'버전()'ANS를 사용하지 않을하기 위해 최선을()'. 참조 또는 직접적인 람다에 의해 함수를 항상 직접 사용하십시오. –

+0

너희들 말이 맞아, 나는 대답을 업데이트했다. – Bitterzoet

1

당신의 레일 버전에 따라 당신은 periodically_call_remote를 사용할 수 있습니다 그렇지 않으면 당신은 @Bitterzoet 설명하는 JQuery와 대안이 필요합니다.

자세한 정보 in this question.

1

이 같은 사초에 아약스 요청을 보낼 수 있습니다

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