2009-05-22 7 views
0

J'ai un script qui met à jour une table lorsqu'il y a de nouvelles entrées dans la base de données. Il tire un temps à partir de la dernière rangée de la table, puis saisit toutes les entrées qui ont été entrées depuis.Prototype PeriodicExecutor ne met pas à jour la source

Il fonctionne bien la première fois, il saisit les nouvelles entrées et met à jour la table. Quand il s'exécute la deuxième fois, cependant, il utilisera cet horodatage initial et ne récupérera pas la dernière entrée en cours qui vient d'être tirée de la base de données. Il semble donc que la fonction PeriodicalExecuter charge le html de la page au démarrage et ne tient pas compte des mises à jour asynchrones ou enregistre simplement cette heure initiale. Y a-t-il moyen de contourner cela?

Voici quelques code:

new PeriodicalExecuter(function() { 
     new Ajax.Request(
     '#{url}&since_ts=' + $$('#posts tr:last-child td.description')[0].innerHTML.match(/Posted at: (\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2})/)[1], 
     {asynchronous:true, 
      evalScripts:true, 
      parameters:'authenticity_token=' + encodeURIComponent('#{form_authenticity_token}') 
     } 
    ) 
    }, 60) 

Je suis assez nouveau javascript et je serais très reconnaissant de toute aide.

Merci!

Répondre

0

je me suis dit que le problème était pas avec la fonction PeriodicExecutor mais plutôt ma déclaration de sélection. Donc tout ce que je devais faire était de trouver un autre moyen d'accéder au dernier élément de la table.

$$('#posts tr td.description').last().innerHTML.match(/Posted at: (\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2})/)[1] 

Si simple et pourtant c'est toujours la dernière chose que vous regardez.

0

Je n'ai jamais utilisé Prototype auparavant, donc c'est une conjecture, mais il pourrait juste mettre en cache l'appel car il est par défaut de GET. Essayez les paramètres suivants est votre appel après l'url

{ 
    asynchronous:true, 
    method: 'post', 
    evalScripts:true, 
    parameters:'authenticity_token=' + encodeURIComponent('#{form_authenticity_token}') 
} 
+0

Ceci est probablement vrai. Essayez d'ajouter "+ new Date()" à votre URL pour le rendre unique. –

Questions connexes