Jquery 使用setInterval,在前面加上重复值。如何准备一次并停止?

Jquery 使用setInterval,在前面加上重复值。如何准备一次并停止?,jquery,Jquery,也许我应该在服务器端执行此操作,但我想先询问并看看是否有一种方法可以在JQuery中执行此操作 我有以下代码 var refresh = setInterval(function() { $.ajax({ url: "scroller.asp", success: function(data) { $("#scroll tbody").prepend(data); }, dataType:'html' }); },10000); 对于每个间隔,服务器数据都会在

也许我应该在服务器端执行此操作,但我想先询问并看看是否有一种方法可以在JQuery中执行此操作

我有以下代码

var refresh = setInterval(function() {
  $.ajax({
    url: "scroller.asp",
    success: function(data) { $("#scroll tbody").prepend(data); },
    dataType:'html'
   });
},10000);

对于每个间隔,服务器数据都会在同一行数据前加上前缀。如何才能只获取一行预先指定的数据,然后让它停止,除非数据不同?

假设您收到数字数组,您可以存储最后一个值,进行比较,并仅在数据不同时追加:

(function(){
   var lastData = [];
   var refresh = setInterval(function() {
     $.ajax({
       url: "scroller.asp",
       success: function(data) {
           var identical = (lastData.length==data.length);
           if (identical) {
               for (var i=0; i<data.length; i++) {
                  if (data[i]!=lastData[i]) {
                    identical = false;
                    break;
                  }
               }
           }
           if (identical) return;
           lastData = data;
           $("#scroll tbody").prepend(data);
       },
       dataType:'html'
     });
   },10000);
})();

为什么不存储最后一个值,进行比较,并仅在其不同时追加?过程中的哪一步对您来说很难?我已经想到了,但是如果我存储最后一个值,它将被下一个间隔覆盖。我遗漏了什么吗?数据是什么?一行数字?HTML。一行数据啊。。第二个例子似乎是可行的。是的,我知道你在这里做了什么。服务器端你主要有两个选择:返回一个特殊的短值,这意味着当它没有改变时,什么都没有。或者最好使用websocket之类的推送协议(最好是通过一个具有socket.io之类回退功能的库)。我担心所有AJAX请求都会导致服务器过载。WebSocket能防止服务器过载吗?是的,它会更干净、更理智。但是每10秒一次的请求算不了什么,即使你有数百个浏览器,但是如果你的服务器没有缓存并且获取数据非常慢的话。使用WebSocket推送数据的主要优点是速度:您可以将数据从源文件即时发送到浏览器。这真的很酷。你能推荐一个好的图书馆吗?我有另一个应用程序,而不是我目前使用的,这将大大受益于此!
(function(){
   var lastData = "";
   var refresh = setInterval(function() {
     $.ajax({
       url: "scroller.asp",
       success: function(data) {
           if (lastData == data) return;
           lastData = data;
           $("#scroll tbody").prepend(data);
       },
       dataType:'html'
     });
   },10000);
})();