Frage

I have a reload function that reloads a page periodically. However, I would like to reload the page only if certain conditions are met (if not, increase the interval for the reload). So I tried using PeriodicalExecutor and an Ajax call like this -

<script type="text/javascript">

var nextReload = 10;

function reloadPage() {

    document.location.reload();
    return new PeriodicalExecuter(function(pe) {

       new Ajax.Request('/Task/reloadPage.htm',
      {
        method:'post', 
        parameters: { ... },
        onSuccess: function(transport) {
          var response = ... 
          nextReload = response.nextReload;           
        },
        onFailure: function(){ ... }
      });     
     this.frequency = nextReload; // doesn't do what I'd like it to do. 
    }, nextReload);    
}

var myReload = reloadPage();

</script>

As you can see, the Ajax call returns the time (in seconds) in which the next reload should occur. However, I am not able to set the frequency of the PeriodicalExecutor to nextReload.

So how can I reload the page at variable time intervals?

War es hilfreich?

Lösung

Would something like this work for you?

<script>

function tryReload(){
    new Ajax.Request('/Task/reloadPage.htm',
    {
        method:'post', 
        parameters: { ... },
        onSuccess: function(transport) {
            if(transport == seconds){
                // call self in x seconds
                setTimeout(tryReload, (1000*transport));
            }
            else{ // transport is a URL
                window.location = transport;
            }
        },
        onFailure: function(){ ... }
    });
}

//start it up!
tryReload();

</script>

Andere Tipps

Based on @Rocket Hazmat's suggestion, this worked for me -

function reloadPage() {

document.location.reload();
return new PeriodicalExecuter(function(pe) {

var that = this;

   new Ajax.Request('/Task/reloadPage.htm',
  {
    method:'post', 
    parameters: { ... },
    onSuccess: function(transport) {
      var response = ... 
      nextReload = response.nextReload; 
      that.frequency = next; 
      that.stop();
      that.registerCallback();          
    },
    onFailure: function(){ ... }
  });     



}, nextReload);    
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top