2011-02-07 59 views
1

我有一些livequery处理程序更新页面内容。我只想在内容被解雇后才显示内容(以防止用户看到一段时间内未更改的版本)。内容使用普通的AJAX加载。jquery更新DOM(AJAX请求)后做些什么

到目前为止,我尝试了以下内容:

  1. 通过HTML
  2. 得到AJAX使其不可见(visibility:hidden的)
  3. window.setTimeout(showContent,100) - 套能见度可见

我认为这将工作,因为有一个单一的选项卡的JS线程 - 所以计时器应该在所有其他操作完成后触发。它可以在FF & IE中使用。然而,在Chrome中,有时候我仍然会看到一段时间内没有改变的内容 - 就好像JS被线程化或由于超时而中断了一样?

或者有更好的方法来实现我想要做的事情? (没有超时)。

+0

你为什么要更新的第一个请求?从请求本身调用所有正确的数据不是更好吗? – yoda 2011-02-07 09:33:52

+0

确定首先生成正确的东西会更好,但某些更新依赖于布局,例如考虑文本的实际宽度(省略号)。 – adamw 2011-02-07 09:40:05

回答

1
  • 可以使用success回调
  • 或者你可以返回的JavaScript本身回来了,它添加到DOM。 (其中你将指定显示机制:))
0

事实证明,livequery在内部使用超时来运行实时查询,所以这是超时方法排序的问题。

所以我解决了这个等到的liveQuery队列清除(有一些界限,如果用户是疯狂的,他的鼠标和不断产生的事件):

function run_after_livequery(method) { 
    var tries = 0; 
    function run_if_livequery_done() { 
     if (!$.livequery.queue.length || tries >= 20) { 
      method(); 
     } else { 
      window.setTimeout(run_if_livequery_done, 50); 
      tries++; 
     } 
    } 

    window.setTimeout(run_if_livequery_done, 50); 
}