代码之家  ›  专栏  ›  技术社区  ›  Prabhu

jquery:帮助更新DIV内容onchange

  •  0
  • Prabhu  · 技术社区  · 14 年前

    我有一个DIV,它的内容根据服务器端进程不断变化。目前,我使用jquery load每3秒轮询一次服务器以获取任何更新。

    这就是我所拥有的:

    function poll() {
        reloadPage();
        setTimeout("poll();", 3000); 
    }
    
    function reloadPage() { 
          $("#mydiv").load(location.href + " #mydiv>*", "");
    }
    

    这在Firefox中很有效,但是在IE中,加载不会更新DIV,可能是由于缓存问题。除了定期进行投票,还有更好的方法来做我正在尝试做的事情吗?

    3 回复  |  直到 8 年前
        1
  •  4
  •   SLaks    14 年前

    您需要更改每个请求的URL,以防止IE缓存响应。

    例如:

    function poll() {
        reloadPage();
        setTimeout(poll, 3000); 
    }
    
    function reloadPage() { 
        $("#mydiv").load(location.href + "?Timestamp=" + new Date() + " #mydiv>*", "");
    }
    

    另外,不应该将字符串传递给 setTimeout .

        2
  •  2
  •   Dan    14 年前

    jquery的ajax有一系列默认设置,其中一个控制缓存。如果将其设置为false,它将向Ajax调用附加一个时间戳以防止缓存。

    http://api.jquery.com/jQuery.ajax/

        3
  •  0
  •   Tomalak    14 年前

    除了定期进行投票,还有更好的方法来做我正在尝试做的事情吗?

    由于HTTP是一种无状态协议,所以不需要。您必须进行轮询才能查看服务器上发生了什么。

    但是有一种更好的方法来实现轮询:

    setInterval(function () {
      $("#mydiv").load(location.href + " #mydiv>*", {Timestamp: new Date()});
    }, 3000);
    

    笔记:

    • 定义一个间隔而不是超时,
    • 将实际函数传递给 setInterval ,不是字符串
    • 使用 data 的参数 load() 进入高速缓存断路器