如果不同的重载数据,如果setInterval上的.get()数据相同则不执行任何操作

时间:2012-11-14 17:01:08

标签: ajax jquery

我有一个DIV,它是在doc ready上的$ .get数据中填充的,然后我每隔5秒调用一次setInterval。我想尝试做的是setInterval $ .get的成功,如果#are_friends的html数据与以前一样,什么都不做,但如果它不同,那么再次将数据加载到#are_friends。

有没有人知道我会如何做到这一点,或者比我试图实施更好的方式。

<div id="are_friends"></div>


<script type="text/javascript">
    $(document).ready(function() {  
                $.get('<?php echo $siteUrl ?>are_friends.php?userid=<?php echo $userid; ?>', function(data) {
                           $("#are_friends").html(data);
                });


        var auto_refresh = setInterval(
         function ()
        {

            $.ajax({
              url: "<?php echo $siteUrl ?>are_friends.php?userid=<?php echo $userid; ?>",
              success: function(newdata){
                var oldcontent = $("#are_friends").html();
                if(oldcontent != newdata) {
                    $("#are_friends").html(newdata);
                }
              }
            });
        }, 5000); // refresh every 5000 milliseconds
    });
</script> 

2 个答案:

答案 0 :(得分:0)

至少,您可以重用获取数据的函数,如下所示:

  function getData(callback)
  {
        $.ajax({
          url: "<?php echo $siteUrl ?>are_friends.php?userid=<?php echo $userid; ?>",
          success: function(newdata){
            callback(newdata);
          }
        });
  }

  $(document).ready(function() 
  {  
        getData(function(data)
        {
            $("#are_friends").html(data);
        });

        var auto_refresh = setInterval(function ()
        {
            getData(function(newdata)
            {
                if($("#are_friends").html() != newdata) {
                    $("#are_friends").html(newdata);
                }
            });
        }, 5000);
    });

实际上,初始调用和后续调用是一样的,为什么不重用呢?

答案 1 :(得分:0)

这与您正在处理的数据有很大关系。现在你只是生产了很多无用的交通工具。当你请求are_friends.php时,我建议发送一些当前状态的标记。 PHP将检查是否使用该标记更改了某些内容并返回“无更改”或更新的HTML。如果没有任何更改且交通更少,则应在此期间降低服务器负载(假设大多数请求将返回“无更改”)。但是又一次。这取决于你在are_friends.php中做了什么,你需要什么数据等等。