2009-05-22 54 views
0

我有一个脚本,在数据库中有新条目时更新表。它从表格的最后一行拉出一段时间,然后抓取从那时起输入的所有条目。原型PeriodicExecutor不更新源

它第一次运行良好,抓取新条目并更新表格。然而,当它第二次运行时,它将使用该初始时间戳,而不检索刚刚从数据库中提取的当前最后一个条目。

因此,看起来PeriodicalExecuter函数在启动时会加载页面的html,并且无法解释任何异步更新,或者仅保存该初始时间。无论如何要解决这个问题吗?

下面是一些代码:

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) 

我是相当新的JavaScript,我将不胜感激任何帮助。

谢谢!

回答

0

后您的来电我想通了,这个问题是不是与PeriodicExecutor功能,而是我选择的语句。所以我所要做的就是找到另一种方法来访问表中最后一个tr元素。

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

这么简单,但它总是你最后看到的东西。

0

我之前没有使用Prototype,所以这是一个疯狂的猜测,但它可能仅仅是缓存调用,因为它默认为GET。试试下面的参数是url

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

这可能是真的。尝试在您的网址中添加“+ new Date()”以使其唯一。 – 2009-05-22 21:49:09